gpt4 book ai didi

使用两个列表的 Scala 排列

转载 作者:行者123 更新时间:2023-12-03 04:02:35 30 4
gpt4 key购买 nike

实现以下目标的最佳方法是什么?我有两个列表:

val l1 = List("a", "b") 
val l2 = List(1, 2)

我想生成这个:

 List (
List(('a', 1), ('b', 1)),
List(('a', 1), ('b', 2)),
List(('a', 2), ('b', 1)),
List(('a', 2), ('b', 2))
)

这基本上是第一个列表与第二个列表结合起来创建元组列表的列表?正在考虑使用带有滑动(2,2)的foldLeft来获得我的结果,但不能仅仅获得正确的结果。

该解决方案应适用于任何大小和类型,例如 List('a', 'b', 'c') 和 List("1", "2")

谢谢

最佳答案

比我想象的更棘手!第一步是计算 l2 的 n 次笛卡尔积,这可以使用 List.fill组合排列 的组合来完成code> (我很难相信没有更简单的方法可以做到这一点,但我还没有找到任何方法):

def prod[T](lst: List[T], n: Int) = List.fill(n)(lst).flatten.combinations(n).flatMap(_.permutations)

n 的值由列表l1 的大小决定。在您的示例中 prod(l2, 2) 将为我们提供 List(List(1, 1), List(1, 2), List(2, 1), List(2, 2 ))。剩下的只是mapzip的应用。我们一起,拥有

prod(l2, l1.size).map(l1.zip(_))

l1 = List('a', 'b', 'c'), l2 = List("1", "2") 的输出:

List((a,1), (b,1), (c,1))
List((a,1), (b,1), (c,2))
List((a,1), (b,2), (c,1))
List((a,2), (b,1), (c,1))
List((a,1), (b,2), (c,2))
List((a,2), (b,1), (c,2))
List((a,2), (b,2), (c,1))
List((a,2), (b,2), (c,2))

关于使用两个列表的 Scala 排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27101500/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com