如何在Scala中使用for循环创建二维列表?

时间:2018-11-10 16:04:32

标签: scala

如果我在scala中编写以下代码,则会得到一维列表,如下所示:

scala> for (a <- (1 to 2).toList; b <- (1 to 3).toList) yield (a, b)

res1 = List((1,1), (1,2), (1,3), (2,1), (2,2), (2,3))

但是我期待:-

List(List((1,1), (1,2), (1,3)), List((2,1), (2,2), (2,3)))

是否可以在scala中使用for循环来执行此操作,还是需要某种其他构造?

3 个答案:

答案 0 :(得分:1)

对于理解,您可以在2中完成:

for (n <- (1 to 4).toList) yield (for (m <- ('a' to 'c').toList) yield (n, m))

答案 1 :(得分:1)

您也可以使用map

(1 to 4).toList.map(n => ('a' to 'c').toList.map(m => (n, m)))

答案 2 :(得分:0)

{for (i <- 1 to 2; j <- 1 to 3) yield (i,j)}.grouped(3).toList

您得到List中的Vector,但这很好,在大多数情况下通常首选Vector。快速随机访问,追加,添加和更新。您可以放弃转换toList直到最后。如果您对Vector感到满意,那么Tom的回答确实很好,您可以将其重构为:

(1 to 4).map(n => ('a' to 'c').map(m => (n, m)))