【问题标题】:Scala: find unique Seqs in Seq of SeqsScala:在 Seq of Seqs 中找到唯一的 Seqs
【发布时间】:2019-01-17 11:56:25
【问题描述】:

我什至很难用语言表达我的意思,所以让我举个例子。

我有一个像这样的Seq,其中Occurrence 是一个案例类:

Seq(
  Seq(Occurrence1, Occurrence2, Occurrence3), 
  Seq(Occurrence2, Occurrence3, Occurrence1),
  Seq(Occurrence4),
  Seq(Occurrence5, Occurrence6),
  Seq(Occurrence6, Occurrence5)
)

我想把它浓缩成这样:

Seq(
  Seq(Occurrence1, Occurrence2, Occurrence3),
  Seq(Occurence4),
  Seq(Occurrence5, Occurrence6)
)

是否有允许我执行此操作的集合 API?我想对该 Seq 中的项目进行排序

【问题讨论】:

  • Scala 2.13 增加了distinctBy,这在这里非常有用。 2.12 及更早版本没有。
  • 有人系统地浏览了我的个人资料,并否决了我在 Stackoverflow 上提供的所有问题和答案。管理员似乎也满足于让它发生。因此,我会要求该帖子的任何后续访问者请真诚地投票并发表评论,解释您为什么认为该帖子有用或没有发现该帖子有用。我不想沉迷于一些可悲的针锋相对的事情,我只是想帮助下一个人。谢谢!

标签: scala collections


【解决方案1】:
  • 您对列表中的元素进行排序
  • 并将列表转换为 Set,因为 set 仅包含不同的元素。

例子,

final case class Occurance(times: Int)

val Occurrence1 = Occurance(times = 1)
val Occurrence2 = Occurance(times = 2)
val Occurrence3 = Occurance(times = 3)
val Occurrence4 = Occurance(times = 4)
val Occurrence5 = Occurance(times = 5)
val Occurrence6 = Occurance(times = 6)

val data = Seq(
        Seq(Occurrence1, Occurrence2, Occurrence3), 
        Seq(Occurrence2, Occurrence3, Occurrence1),
        Seq(Occurrence4),
        Seq(Occurrence5, Occurrence6),
        Seq(Occurrence6, Occurrence5)
      )

data.map(_.sortBy {_.times}).toSet.toSeq

//res0: Seq[Seq[Occurance]] = Vector(List(Occurance(1), Occurance(2), Occurance(3)), List(Occurance(4)), List(Occurance(5), Occurance(6)))
  • 你也可以distinct代替.toSet.toSeq

例子,

data.map(_.sortBy{_.times}).distinct
//res1: Seq[Seq[Occurance]] = List(List(Occurance(1), Occurance(2), Occurance(3)), List(Occurance(4)), List(Occurance(5), Occurance(6)))

不知何故相关的问题 - How in Scala to find unique items in List

【讨论】:

  • 很高兴为您提供帮助,不过您可能需要找到排序功能。欢迎来到斯卡拉
  • data.map(_.toSet).toSet 我觉得应该够了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多