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子句。