gpt4 book ai didi

scala - 如何生成集合的成对组合,而忽略顺序?

转载 作者:行者123 更新时间:2023-12-04 10:03:50 28 4
gpt4 key购买 nike

假设我有一个集合(让我们使用一个集合):

scala> val x = Set(1, 2, 3)
x: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

我可以使用以下代码获得所有成对组合:

scala> for {
| a <- x
| b <- x
| if a != b
| } yield (a, b)
res9: scala.collection.immutable.Set[(Int, Int)] = Set((3,1), (3,2), (1,3), (2,3), (1,2), (2,1))

问题是我只想获得忽略顺序的所有成对组合(因此组合 (1, 2) 等效于 (2, 1) )。所以我想返回 Set((3, 1), (3, 2), (1, 2)) .

不要假设集合的元素是整数。它们可以是任意类型。

有任何想法吗?

编辑:Python 的 itertools.combinations 执行我正在寻找的确切功能。我只想用惯用的方式在 Scala 中做到这一点:)

最佳答案

Scala 有一个 combinations方法也是如此,但它仅在 Seq 上定义,不是 Set .所以把你的套装变成 Seq首先,下面会给你一个Iterator[Seq[Int]] :

x.toSeq.combinations(2)

如果你真的想要元组,添加 map {case Seq(a,b) => (a,b)}以上。

关于scala - 如何生成集合的成对组合,而忽略顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28445130/

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