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

195 阅读1分钟

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

欢迎转载,转载请标明出处:blog.csdn.net/notbaron/ar…
源码下载连接请见第一篇笔记。\

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

例如:

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