Nó không rõ ràng những gì bạn đang yêu cầu - những gì bạn mong đợi các ngữ nghĩa của nhiều sản lượng được. Tuy nhiên, có một điều là bạn có thể không bao giờ muốn sử dụng các chỉ mục để điều hướng một danh sách - mỗi cuộc gọi đến t (i) là O (i) để thực hiện.
Vì vậy, đây là một khả năng mà bạn có thể được yêu cầu cho
scala> val l = List(1,2,3); val t = List(-1,-2,-3)
l: List[Int] = List(1, 2, 3)
t: List[Int] = List(-1, -2, -3)
scala> val pairs = l zip t
pairs: List[(Int, Int)] = List((1,-1), (2,-2), (3,-3))
Và đây là một khả năng mà bạn có thể được yêu cầu cho
scala> val crossProduct = for (x <- l; y <- t) yield (x,y)
crossProduct: List[(Int, Int)] = List((1,-1), (1,-2), (1,-3), (2,-1), (2,-2), (2,-3), (3,-1), (3,-2), (3,-3))
Các sau là đường chỉ là cú pháp cho
scala> val crossProduct2 = l flatMap {x => t map {y => (x,y)}}
crossProduct2: List[(Int, Int)] = List((1,-1), (1,-2), (1,-3), (2,-1), (2,-2), (2,-3), (3,-1), (3,-2), (3,-3))
Khả năng thứ ba là bạn muốn xen kẽ chúng
scala> val interleaved = for ((x,y) <- l zip t; r <- List(x,y)) yield r
interleaved: List[Int] = List(1, -1, 2, -2, 3, -3, 4, -4, 5, -5, 6, -6, 7, -7, 8, -8, 9, -9, 10, -10)
Đó là đường cú pháp cho
scala> val interleaved2 = l zip t flatMap {case (x,y) => List(x,y)}
interleaved2: List[Int] = List(1, -1, 2, -2, 3, -3, 4, -4, 5, -5, 6, -6, 7, -7, 8, -8, 9, -9, 10, -10)
không rõ ràng. –