gpt4 book ai didi

scala - 保留顺序的两个列表的随机合并

转载 作者:行者123 更新时间:2023-12-03 23:33:24 24 4
gpt4 key购买 nike

我有两个列表,比如说 val l1 = List(1, 2, 3, 4)val l2 = List(5, 6, 7, 8)并且我想以在单个列表范围内排序的项目保持不变的方式合并和打乱它们,但结果列表被打乱了。

请让我解释一下并举几个例子:

Desired - List(1, 2, 5, 6, 3, 4, 7, 8) - 您可能会看到 l1 的原始项目订单保留 - 之后1 去 2,在 2 之后,去 3 - 跳过 l2 中的项目,因为我们只看 l1 中的元素相对于彼此。 l2 在 5 到 6 之后也是如此,依此类推。

Desired - List(5, 6, 1, 2, 7, 8, 3, 4) - 元素顺序从 l1l2 彼此相关地保存,类似于前面的示例。

错误 - List(6, 5, 1, 2, 7, 8, 3, 4) - 6 在 5 之前,这与 l2 中不同。

这么简单的 Random.shuffle(l1++ l2) 对我不起作用。

假设两个列表中的所有项目都是唯一的。

有什么优雅的方法可以做到这一点吗?谢谢!

最佳答案

每次运行它都会得到不同但正确的结果。

import scala.util.Random

val l1 = List(1, 2, 3, 4)
val l2 = List(5, 6, 7, 8)

List.unfold((l1,l2)){
case (Nil, Nil) => None
case (Nil, hd::tl) => Some((hd, (Nil,tl)))
case (hd::tl, Nil) => Some((hd, (Nil,tl)))
case (a, b) =>
if (Random.nextBoolean()) Some((a.head, (a.tail,b)))
else Some((b.head, (a,b.tail)))
}

关于scala - 保留顺序的两个列表的随机合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66272799/

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