60.scala编程思想笔记——将序列与zip相结合

本文介绍了Scala中序列与zip方法结合使用的多种技巧,包括如何将两个序列进行配对、如何给序列元素添加索引以及如何结合zip和map实现更复杂的数据转换。

60.scala编程思想笔记——将序列与zip相结合

欢迎转载,转载请标明出处:http://blog.youkuaiyun.com/notbaron/article/details/50458721
源码下载连接请见第一篇笔记。

接受两个序列并将其配对使用这种做法经常很有用,称为链接。

例如:

import com.atomicscala.AtomicTest._

 

val left = Vector("a", "b","c", "d")

val right = Vector("q", "r","s", "t")

 

left.zip(right) is

"Vector((a,q), (b,r), (c,s), (d,t))"

 

left.zip(0 to 4) is

"Vector((a,0), (b,1), (c,2), (d,3))"

 

left.zipWithIndex is

"Vector((a,0), (b,1), (c,2), (d,3))"

将left与right结合在一起,所产生的结果是一个由元组构成的Vector,将这些元组是通过将left的每个元素与right中的每个元素配对而产生的。

如果只想在序列中的每个元素之上添加一个索引,那么可以使用专用于此目的的方法zipWithIndex.

         放置数字时将其走位元组的第一个元素而不是第二个元素,如下:

import com.atomicscala.AtomicTest._

 

def number(s:String) =

  Range(0,s.length).zip(s)

 

number("Howdy") is

Vector((0,'H'), (1,'o'), (2,'w'),

       (3,'d'),(4,'y'))

注意,与字符串链接时会自动将String断开为一个个的字母。

最后体现以下zip和map结合如下:

import com.atomicscala.AtomicTest._

 

case class Person(name:String, ID:Int)

val names = Vector("Bob", "Jill","Jim")

val IDs = Vector(1731, 9274, 8378)

 

names.zip(IDs).map {

  case (n, id)=> Person(n, id)

} is "Vector(Person(Bob,1731), " +

"Person(Jill,9274), Person(Jim,8378))"

其中zip产生name-id元组序列,会被传递给map.map方法可以应用函数,也可以应用match子句。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值