代码之家  ›  专栏  ›  技术社区  ›  Harshit Kakkar

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

  •  0
  • Harshit Kakkar  · 技术社区  · 7 年前

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

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

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

    我知道我可以用下面的代码找到它:

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

    但是我不能把上面的清单分割成“”。我试图转换成 String 然后使用split,但我得到了以下结果:

    L 我 S T ( 一 零 三 )

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

    参考文献: How to find duplicates in a list?

    3 回复  |  直到 7 年前
        1
  •  2
  •   SCouto    7 年前

    符号是scala中的函数。你可以检查API here

    |(x:int):int

    返回该值和x的按位“或”。

    所以你没有 List ,你有单人间 Integer (103)这是操作的结果 | 所有的整数都在你的虚拟列表中。

    如果你想使 你应该用逗号分隔它的元素

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

    如果你想转换你给的 String 之前 把它放在 你可以这样做:

    "1|1|1|2|3|4|5|5|6|100|101|101|102".split("\\|").toList
    
        2
  •  0
  •   osleonard    7 年前

    解决问题的另一种方法

    “1 1 2 3 4 5 5 6 100 101 101 102”.拆分(“”).GroupBy(x=>x).MapValues(大小)

    res0:scala.collection.immutable.map[string,int]=map(100->1,4->1,5->2,6->1,1->3,102->1,2->1,101->2,3->1)

        3
  •  0
  •   themathmagician    7 年前

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

    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 在结果集上:

    scala> noDup.size
    res3: Int = 9