优雅的方式来形成专门的元组或三元组

时间:2014-07-02 20:43:22

标签: scala functional-programming enumeration

我正在尝试创建以下内容:

(1, 1)
(1, 2)
(1, 3)
...
(9,9)
Scala中的

我尝试过这样的事情:

(1 to 9) zip (1 to 9),但那不太对劲。有一个干净的功能方式来做到这一点?希望无论什么解决方案都可以轻松扩展到三元组,等等。

2 个答案:

答案 0 :(得分:4)

19的2个范围使用for-comprehension。

val tuples = for (x <- 1 to 9; y <- 1 to 9) yield (x, y)

答案 1 :(得分:1)

您也可以使用desugared版本

val tuples = (1 to 9).flatMap(y => (1 to 9).map(y => (x,y)) )

或算术

val tuples = (0 until 9*9).map(i => (i/9+1, i%9+1) )

或基于流的

val s:Stream[Int] = (1 to 9).toStream #::: s
val tuples = (1 to 9).flatMap(List.fill(9)(_)).zip(s)

或基于对称收集的

val tuples = (1 to 9).map(List.fill(9)(_)).flatten zip
  List.fill(9)((1 to 9)).flatten