scala zip--拉链操作入门

本文介绍Scala中Zip函数的应用,包括如何将不同类型的集合如Array、Seq和List进行配对组合,并展示了如何处理不同长度集合间的配对及如何取消配对。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的

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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸭梨山大哎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值