如果我在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循环来执行此操作,还是需要某种其他构造?
答案 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)))