seq
产生当前序列的sequential视图
var a=Array(1,2,3,4,5)
a.seq
scala.collection.mutable.IndexedSeq[Int] = WrappedArray(1, 2, 3, 4, 5)
size
序列的大小
scala> a.size
res2: Int = 5
slice
取出当前序列中,from 到 until 之间的元素。
不包含until。
val a=Array(1,2,3,4,5,6,7,8)
a.slice(1,4)
Array[Int] = Array(2, 3, 4)
sliding
从第一个元素开始,每个元素和它后面的 size - 1 个元素组成一个数组,最终组成一个新的集合返回,当剩余元素不够 size 数,则停止.。返回的是一个迭代器。
var b=Array(1,2,3,4)
b.sliding(2).toList
List[Array[Int]] = List(Array(1, 2), Array(2, 3), Array(3, 4))
sliding 还可以设置步长n,默认是1。即个新的数组的起始值为上一数值的起始值+n
a.sliding(3,2).toList
List[Array[Int]] = List(Array(1, 2, 3), Array(3, 4, 5), Array(5, 6, 7), Array(7, 8))
sortBy
按指定规则排序
scala> var a=Array(3,1,4,2,5,7,6,8)
a: Array[Int] = Array(3, 1, 4, 2, 5, 7, 6, 8)
//升序排序
scala> a.sortBy(x=>x)
res51: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8)
//降序排序
scala> a.sortBy(x=>(-1*x))
res52: Array[Int] = Array(8, 7, 6, 5, 4, 3, 2, 1)
sortWith
自定义排序
var a=Array(3,1,4,2,5,7,6,8)
a: Array[Int] = Array(3, 1, 4, 2, 5, 7, 6, 8)
//降序
var b=a.sortWith(_>_)
b: Array[Int] = Array(8, 7, 6, 5, 4, 3, 2, 1)
//升序
var b=a.sortWith(_<_)
b: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8)
//降序
var b=a.sortWith(_.compareTo(_)>0)
b: Array[Int] = Array(8, 7, 6, 5, 4, 3, 2, 1)
sorted
使用默认的规则排序:升序
var b=a.sorted
b: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8)
再总结下这几个排序:
scala> var arr=Array(("java",3),("MySQL",4),("Scala",2),("Spark",5))
arr: Array[(String, Int)] = Array((java,3), (MySQL,4), (Scala,2), (Spark,5))
scala> var a=arr.sorted
a: Array[(String, Int)] = Array((MySQL,4), (Scala,2), (Spark,5), (java,3))
//按每个元组第二个元素排序
scala> var b=arr.sortBy(x=>x._2)
b: Array[(String, Int)] = Array((Scala,2), (java,3), (MySQL,4), (Spark,5))
scala> var c=arr.sortWith((x,y)=>x._2>x._2)
c: Array[(String, Int)] = Array((java,3), (MySQL,4), (Scala,2), (Spark,5))
scala> var c=arr.sortWith((x,y)=>x._2>y._2)
c: Array[(String, Int)] = Array((Spark,5), (MySQL,4), (java,3), (Scala,2))
span
分割序列为两个集合,从序列第一个元素开始到第一个不满足条件的元素为止,这一部分元素放到第一个集合,其它放到第二个集合。
var a=Array(1,2,3,4,5,6)
a.span(_<4)
(Array[Int], Array[Int]) = (Array(1, 2, 3),Array(4, 5, 6))
splitAt
从指定位置开始,拆分成两个集合:
a.splitAt(3)
(Array[Int], Array[Int]) = (Array(1, 2, 3),Array(4, 5, 6))
//取第一个
a.splitAt(3)._1
Array[Int] = Array(1, 2, 3)
startsWith
指定偏移处,是否已某个序列开始。
var a=Array(1,2,3,4,5,6,7,8)
val b=Array(2,3,4)
a.startsWith(b,1)
//结果
Boolean = true
stringPrefix
返回类型前缀
scala> val a=Array(1,2,3,4,5)
a: Array[Int] = Array(1, 2, 3, 4, 5)
scala> val b=List(1,2,3,4,5)
b: List[Int] = List(1, 2, 3, 4, 5)
scala> val c=Array("a","b","c")
c: Array[String] = Array(a, b, c)
scala> val d=Array(("a",1),("b",2),("c",3))
d: Array[(String, Int)] = Array((a,1), (b,2), (c,3))
scala> a.stringPrefix
res73: String = [I
scala> b.stringPrefix
res74: String = List
scala> c.stringPrefix
res75: String = String;
scala> d.stringPrefix
res76: String = Tuple2;
subSequence
def subSequence(start: Int, end: Int): CharSequence
返回start和end之间的字符序列。[start,end)。
var b=Array('a','b','c','d')
b.subSequence(1,3)
CharSequence = bc
sum
序列元素求和
a.sum
Int = 15
tail
返回除第一个元素外,其它元素组成的序列
a.tail
Array[Int] = Array(2, 3, 4, 5)
take
返回序列中前n个元素组成的序列
a.take(3)
Array[Int] = Array(1, 2, 3)
takeRight
同take,从右面开始取。
takeWhile
从第一个元素开始,满足条件的连续元素组成的序列
var a=Array(1,2,3,4,5)
a.takeWhile(_<4)
Array[Int] = Array(1, 2, 3)
//第一个元素不满足条件,所以返回空
a.takeWhile(_>3)
Array[Int] = Array()
toArray
转换成Array类型;
toBuffer
转换成Buffer类型
toIndexedSeq
转换成IndexdSeq类型
toIterable
转换成可迭代的类型
toIterator
同iterator方法
toList
转换成List
toMap
同Map类型,需要被转换序列中包含的元素是Tuple2类型数据。
var arr=Array(("a","b"),("c","d"),("e","f"))
arr.toMap
scala.collection.immutable.Map[String,String] = Map(a -> b, c -> d, e -> f)
toSeq
转换成Seq类型
toSet
转换成Set类型
toVector
转换成Vector类型
transform
改变元素的样式
var arr2=Array("a","b","c")
arr2.transform(x=>(x+"1"))
//为每一个元素后加个1
scala.collection.mutable.WrappedArray[String] = WrappedArray(a1, b1, c1)
var arr=Array(("a","b","c"),("d","e","f"))
arr.transform(x=>(x._1+"1",x._2+"2",x._3+"3"))
//针对不同的元素添加不同的标记
scala.collection.mutable.WrappedArray[(String, String, String)] = WrappedArray((a1,b2,c3), (d1,e2,f3))
transpose
矩阵转换,行列转换
var arr=Array(Array("a","b"),Array("c","d"),Array("e","f"))
arr.transpose
Array[Array[String]] = Array(Array(a, c, e), Array(b, d, f))
union
用法同++,合并两个序列
var a=Array(1, 2, 3, 4, 5)
var b=Array(5,6,7)
a++b
Array[Int] = Array(1, 2, 3, 4, 5, 5, 6, 7)
a.union(b)
Array[Int] = Array(1, 2, 3, 4, 5, 5, 6, 7)
unzip
将含有两个元素的数组,各第一个元素取出来组成一个序列,第二个元素再组成一个序列。
var a=Array(("a","b"),("c","d"))
a.unzip
(Array[String], Array[String]) = (Array(a, c),Array(b, d))
unzip3
用法同unzip。
update
def update(i: Int, x: T): Unit
将指定i处的元素更新为x
scala> var a=Array(1,2,3,4)
a: Array[Int] = Array(1, 2, 3, 4)
scala> a.update(3,40)
scala> a
Array[Int] = Array(1, 2, 3, 40)
updated
用法同update,不过updated更新后产生一个新的序列,对原序列本身不做修改
scala> var a=Array(1,2,3,4)
a: Array[Int] = Array(1, 2, 3, 4)
scala> var b=a.updated(3,40)
b: Array[Int] = Array(1, 2, 3, 40)
scala> b
res104: Array[Int] = Array(1, 2, 3, 40)
scala> a
res105: Array[Int] = Array(1, 2, 3, 4)
view
def view(from: Int, until: Int): IndexedSeqView[T, Array[T]]
返回from到until之间的元素。[from,until)。
a.view(1,3)
a.view(1,3).toList
List[Int] = List(2, 3)
withFilter
根据条件过滤元素,和filter不同的产生的类型不同。
var a=Array(1,2,3,4)
scala> a.withFilter(_>3)
res108: scala.collection.generic.FilterMonadic[Int,Array[Int]] = scala.collection.TraversableLike$WithFilter@4c1cf079
//遍历查看
scala> a.withFilter(_>3).foreach(println)
4
zip
将两个序列对应位置上的元素组成一个元组,生成新的序列。
元素数量不同,也只匹配对应索引处的元素。
var a=Array(1,2,3,4)
var b=Array("a","b","c","d")
a.zip(b)
Array[(Int, String)] = Array((1,a), (2,b), (3,c), (4,d))
var c=Array("a","b","c","d","e")
a.zip(c)
Array[(Int, String)] = Array((1,a), (2,b), (3,c), (4,d))
zipAll
def zipAll[B](that: collection.Iterable[B], thisElem: A, thatElem: B): Array[(A, B)]
同 zip ,但是允许两个序列长度不一样,不足的自动填充,如果当前序列端,空出的填充为 thisElem,如果 that 短,填充为 thatElem。
var a=Array(1,2,3,4)
a: Array[Int] = Array(1, 2, 3, 4)
var c=Array("a","b","c","d","e")
c: Array[String] = Array(a, b, c,d,e)
var arr1=a.zipAll(c,5,"f")
//结果
Array[(Int, String)] = Array((1,a), (2,b), (3,c), (4,d), (5,e))
var a=Array(1,2,3,4,5,6)
a: Array[Int] = Array(1, 2, 3, 4, 5, 6)
var b=Array("a","b","c")
b: Array[String] = Array(a, b, c)
var arr2=a.zipAll(b,7,"d")
arr2: Array[(Int, String)] = Array((1,a), (2,b), (3,c), (4,d), (5,d), (6,d))
zipWithIndex
序列中的每个元素和它的索引组成一个序列
var b=Array("a","b","c")
b: Array[String] = Array(a, b, c)
var c=b.zipWithIndex
c: Array[(String, Int)] = Array((a,0), (b,1), (c,2))