如何在Scala中查找列表中的重复项?

时间:2018-05-29 07:25:57

标签: scala collections functional-programming

我有一个未排序的整数列表,我想找到重复的元素。

val ans2 = dup.groupBy(identity).map(t => (t._1, t._2.size))

我必须找到唯一元素的列表以及每个元素重复的次数。

我知道我可以通过以下代码找到它:

String

但是我无法在“|”上拆分上面的列表。我尝试转换为{{1}}然后使用拆分但我得到了以下结果:

→ 一世 小号 Ť ( 1 0 3 )

我不知道为什么我会得到这个结果。 你能帮忙吗?

参考:How to find duplicates in a list?

3 个答案:

答案 0 :(得分:2)

符号|是scala中的一个函数。您可以查看API here

  

|(x:Int):Int

     

返回此值与x的按位OR。

所以你没有List,你有一个Integer(103),这是操作|所有假装列表中所有整数的结果。

你的代码很好,如果你想做一个正确的List你应该用逗号分隔它的元素

val dup = List(1,1,1,2,3,4,5,5,6,100,101,101,102)

如果您希望在<{1}} {/ 1}}之前转换给定的String ,您可以执行以下操作:

List

答案 1 :(得分:0)

更简单,将重复列表转换为集合 - 集合是一种默认情况下不具有任何重复项的数据结构。

apt-get install nautilus

要对元素进行计数,只需在结果集上调用方法scala> val dup = List(1,1,1,2,3,4,5,5,6,100,101,101,102) dup: List[Int] = List(1, 1, 1, 2, 3, 4, 5, 5, 6, 100, 101, 101, 102) scala> val noDup = dup.toSet res0: scala.collection.immutable.Set[Int] = Set(101, 5, 1, 6, 102, 2, 3, 4, 100)

size

答案 2 :(得分:0)

解决问题的另一种方法

“1 | 1 | 1 | 2 | 3 | 4 | 5 | 5 | 6 | 100 | 101 | 101 | 102”.split(“\ |”)。groupBy(x =&gt; x)。mapValues( _.size)

  

res0:scala.collection.immutable.Map [String,Int] = Map(100 - &gt; 1,4 - &gt; 1,5-&gt; 2,6-&gt; 1,1 - > 3, 102-&gt; 1,2-&gt; 1,101-> 2,3-> 1)