目的
zip主要用于关联两个集合,关联的结果可以是Array,List等等,然后集合中的元素成为二元tuple
用法
//创建一个Array
scala> var names=Array("zhangsan","lisi","wangmazi")
names: Array[String] = Array(zhangsan, lisi, wangmazi)
//创建另一个Array scores
scala> val scores=Array(60,70,90)
scores: Array[Int] = Array(60, 70, 90)
//利用zip关联两个Array,形成一个新的Array,Array中的每个元素是一个Tuple,详见tuple
scala> names.zip(scores)
res0: Array[(String, Int)] = Array((zhangsan,60), (lisi,70), (wangmazi,90))
//zip关联的另一种写法
scala> names zip scores
res1: Array[(String, Int)] = Array((zhangsan,60), (lisi,70), (wangmazi,90))
//创建一个Seq
scala> val nums=Seq(0,1,2,3,4)
nums: Seq[Int] = List(0, 1, 2, 3, 4)
//创建一个List
scala> val series=List("a","b","c")
series: List[String] = List(a, b, c)
//关联2个List和Seq,任意集合均可关联,集合长度不一样时候以短的为准
scala> nums.zip(series)
res5: Seq[(Int, String)] = List((0,a), (1,b), (2,c))
//关联也有主动被动的问题
scala> series.zip(nums)
res6: List[(String, Int)] = List((a,0), (b,1), (c,2))
//关联集合长度不一样时可以用默认值处理.
scala> nums.zipAll(series,"A",20)
res7: Seq[(Any, Any)] = List((0,a), (1,b), (2,c), (3,20), (4,20))
scala> series.zipAll(nums,"A",20)
res8: List[(String, Int)] = List((a,0), (b,1), (c,2), (A,3), (A,4))
scala> series
res9: List[String] = List(a, b, c)
//关联索引和元素自身
scala> series.zipWithIndex
res10: List[(String, Int)] = List((a,0), (b,1), (c,2))
//关联时自定义索引的起始位置
scala> val ps=series.zip(Stream from 10)
ps: List[(String, Int)] = List((a,10), (b,11), (c,12))
//如果想解除关联,恢复自由身
scala> ps unzip
warning: there was one feature warning; re-run with -feature for details
res12: (List[String], List[Int]) = (List(a, b, c),List(10, 11, 12))