Scala - 生成所有组合(带顺序)和计数

  • 本文关键字:顺序 组合 Scala scala
  • 更新时间 :
  • 英文 :


在Scala中, 我有一个序列val test : Seq[String] = Seq("table","bag","chair","chair")

我想生成上述序列的所有组合,顺序很重要,并且还要计算组合在序列中出现的次数。 即(table,bag,1), (table,chair,2), (bag,table,1), (bag,chair,2), (chair,table,1), (chair,bag,2).

另外,我不需要考虑相同元素的组合,即(chair,chair)必须忽略。 我该怎么做?

如果您考虑一下,任何组合(配对(的计数都是第一个元素的计数乘以第二个元素的计数。

val ws = Seq("table","bag","chair","chair")
val count = ws.groupBy(identity).mapValues(_.length)
val result = ws.distinct.combinations(2).flatMap{ case Seq(a,b) =>
val comboCount = count(a) * count(b)
Seq((a,b,comboCount), (b,a,comboCount))
}

你可以这样做:

val ans: Seq[(String, String)] = for {
a <- test
b <- test
if a != b
} yield {
(a, b)
}
val result: Iterator[(String, String, Int)] = ans.groupBy(identity).mapValues(_.length).toIterator.map{
case ((key, value), frequency)=> (key, value, frequency)
}
result1.foreach(println)

输出

(bag,table,1)
(table,chair,2)
(chair,table,2)
(chair,bag,2)
(bag,chair,2)
(table,bag,1)

最新更新