Scala数组函数(seq~zipWithIndex)

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))
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值