Scala中嵌套列表的元素交叉分布实现需求咨询
实现嵌套列表的笛卡尔积组合
嘿,你要的其实就是两个列表的笛卡尔积(Cartesian Product)操作嘛——把list1里的每个子列表和list2里的每个子列表逐一配对,生成包含这两个子列表的新列表。我用Scala给你写个具体实现,毕竟你的列表结构看起来是Scala风格的:
步骤1:定义原始列表
首先先把你给出的list1和list2明确下来:
val list1 = List(List("n1", "n3"), List("n1", "n4"), List("n3", "n4")) val list2 = List(List("n2"), List("n3"), List("n4"))
步骤2:计算笛卡尔积
你可以用Scala的for推导式来实现,写法直观易懂:
val result = for { subListFromList1 <- list1 subListFromList2 <- list2 } yield List(subListFromList1, subListFromList2)
如果你更喜欢用高阶函数链式调用,也可以用flatMap+map的组合:
val result = list1.flatMap(sub1 => list2.map(sub2 => List(sub1, sub2)))
结果验证
运行上面的代码后,result就是你想要的结构:
List( List(List("n1", "n3"), List("n2")), List(List("n1", "n4"), List("n2")), List(List("n3", "n4"), List("n2")), List(List("n1", "n3"), List("n3")), List(List("n1", "n4"), List("n3")), List(List("n3", "n4"), List("n3")), List(List("n1", "n3"), List("n4")), List(List("n1", "n4"), List("n4")), List(List("n3", "n4"), List("n4")) )
简单解释下逻辑:不管用for推导式还是高阶函数,核心都是遍历list1的每一个子列表,再针对每个子列表遍历list2的所有子列表,把每一对子列表包装成一个新的列表,最终收集所有这样的组合就完成了。
内容的提问来源于stack exchange,提问作者Pedro Gonçalves
相关产品推荐
相关产品推荐

