Scala zip iterator

本文介绍了Scala中的Zip拉链操作,用于合并两个集合形成对偶元组。拉链操作需要注意集合个数不对应可能导致数据丢失,且不仅限于List,Array等也可使用。同时讲解了通过iterator方法获取迭代器,并利用hasNext和next方法遍历集合内容。

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

Zip 拉链(合并)

在开发中,当我们需要将两个集合对偶元组合并,可以使用拉链。

// 拉链
val list1 = List(1, 2 ,3)
val list2 = List(4, 5, 6)
val list3 = list1.zip(list2) //((1,4), (2,5),(3,6))
println("list3=" + list3)

注意事项:

  1. 链的本质就是两个集合的合并操作,合并后每个元素是一个 对偶元组
  2. 果两个集合个数不对应,会造成数据丢失。
  3. 合不限于List, 也可以是其它集合比如 Array。
  4. 果要取出合并后的各个对偶元组的数据,可以遍历。

 

iterator 迭代器

 iterator方法从集合获得一个迭代器,通过while循环和for表达式对集合进行遍历。

val iterator = List(1, 2, 3, 4, 5).iterator //
println("-------- 遍历方式 while --------")
while (iterator.hasNext) {
    println(iterator.next())
}

println("-------- 遍历方式 for --------")
for(enum <- iterator) {
    println(enum) //
}

iterator 的构建实际是 AbstractIterator 的一个匿名子类,该子类提供了。

2)AbstractIterator 子类提供了  hasNext next 等方法。

3)此,我们可以使用 while的方式,使用hasNext next 方法变量。

// 源码

override /*IterableLike*/
def iterator: Iterator[A] = new AbstractIterator[A] {
  var these = self
  def hasNext: Boolean = !these.isEmpty
  def next(): A =
    if (hasNext) {
      val result = these.head; these = these.tail; result
    } else Iterator.empty.next()

  override def toList: List[A] = {
    val xs = these.toList
    these = these.take(0)
    xs
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值