List Scala在列表中保持唯一值

List Scala在列表中保持唯一值,list,scala,unique,List,Scala,Unique,我想在Scala中编写一个函数,返回列表中的唯一值 例如: unique(List("a", "b", "b", "abba", "abba", "abba", "a", "a", "y", "1")) //> res6: List[String] = List(y, 1) 我在另一篇文章中发现了一个很好的函数,但它不能完全满足我的要求,它还返回“a”、“b”和“abba”,我只需要“y”和“1”: 有人知道如何调整此函数以使其按我所希望的方式工作吗?如何: scala> List

我想在Scala中编写一个函数,返回列表中的唯一值

例如:

unique(List("a", "b", "b", "abba", "abba", "abba", "a", "a", "y", "1"))
//> res6: List[String] = List(y, 1)
我在另一篇文章中发现了一个很好的函数,但它不能完全满足我的要求,它还返回“a”、“b”和“abba”,我只需要“y”和“1”:

有人知道如何调整此函数以使其按我所希望的方式工作吗?

如何:

scala> List("a", "b", "b", "abba", "abba", "abba", "a", "a", "y", "1")
       .map(_.toString).flatten.toSet
res8: scala.collection.immutable.Set[Char] = Set(a, b, y, 1)
编辑: 因此,对于uniques,我想您可以将其修改为:

scala> List("a", "b", "b", "abba", "abba", "abba", "a", "a", "y", "1")
       .map(_.toString).flatten.groupBy(identity).filter(_._2.size == 1).map(_._1)
res11: scala.collection.immutable.Iterable[Char] = List(1, y)
这个怎么样:

scala> List("a", "b", "b", "abba", "abba", "abba", "a", "a", "y", "1")
       .map(_.toString).flatten.toSet
res8: scala.collection.immutable.Set[Char] = Set(a, b, y, 1)
编辑: 因此,对于uniques,我想您可以将其修改为:

scala> List("a", "b", "b", "abba", "abba", "abba", "a", "a", "y", "1")
       .map(_.toString).flatten.groupBy(identity).filter(_._2.size == 1).map(_._1)
res11: scala.collection.immutable.Iterable[Char] = List(1, y)
这将有助于:

scala> List("a", "b", "b", "abba", "abba", "abba", "a", "a", "y", "1")
  .flatten.groupBy(identity).filter(_._2.size == 1).map(_._1)
res5: collection.immutable.Iterable[Char] = List('1', 'y')
不过,您的问题有点不清楚,因为您不希望此列表中的值是唯一的

List("a", "b", "b", "abba", "abba", "abba", "a", "a", "y", "1")
而是从这个

List('a', 'b', 'b', 'a', 'b', 'b', 'a', 'a', 'b', 'b', 'a', 'a', 'b', 'b', 'a', 'a', 'a', 'y', '1')
这将有助于:

scala> List("a", "b", "b", "abba", "abba", "abba", "a", "a", "y", "1")
  .flatten.groupBy(identity).filter(_._2.size == 1).map(_._1)
res5: collection.immutable.Iterable[Char] = List('1', 'y')
不过,您的问题有点不清楚,因为您不希望此列表中的值是唯一的

List("a", "b", "b", "abba", "abba", "abba", "a", "a", "y", "1")
而是从这个

List('a', 'b', 'b', 'a', 'b', 'b', 'a', 'a', 'b', 'b', 'a', 'a', 'b', 'b', 'a', 'a', 'a', 'y', '1')
简单一点:

scala> List("a", "b", "b", "abba", "abba", "abba", "a", "a", "y", "1")
  .groupBy(identity).values.filter(_.size ==1).flatten
res3: Iterable[String] = List(y, 1)
简单一点:

scala> List("a", "b", "b", "abba", "abba", "abba", "a", "a", "y", "1")
  .groupBy(identity).values.filter(_.size ==1).flatten
res3: Iterable[String] = List(y, 1)

这也会返回“a”和“b”。我只想要像“y”和“1”这样的唯一值。啊。现在明白你的意思了@Łukasz击败了我。这是正确的方法。它还返回“a”和“b”。我只想要像“y”和“1”这样的唯一值。啊。现在明白你的意思了@Łukasz击败了我。那是正确的方法。效果很好。谢谢很好用。谢谢您可以创建一个,然后仅保留计数为1的值。您可以创建一个,然后仅保留计数为1的值。