Scala:在Seq of Seq中查找唯一的Seq

Scala:在Seq of Seq中查找唯一的Seq,scala,collections,Scala,Collections,我甚至很难用语言表达我想问的问题,所以让我举个例子 我有一个类似这样的Seq,其中事件是一个案例类: Seq( Seq(Occurrence1, Occurrence2, Occurrence3), Seq(Occurrence2, Occurrence3, Occurrence1), Seq(Occurrence4), Seq(Occurrence5, Occurrence6), Seq(Occurrence6, Occurrence5) ) 我想把它浓缩成这样: Se

我甚至很难用语言表达我想问的问题,所以让我举个例子

我有一个类似这样的
Seq
,其中
事件
是一个案例类:

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?我想对该序列中的项目进行排序
  • 您可以对列表中的元素进行排序
  • 并将列表转换为
    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)))
    
    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)))
    
    • 您也可以
      不重复
      ,而不是
      .toSet.toSeq
    例如

    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)))
    
    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)))
    
    相关问题-

    • 您可以对列表中的元素进行排序
    • 并将列表转换为
      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)))
    
    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)))
    
    • 您也可以
      不重复
      ,而不是
      .toSet.toSeq
    例如

    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)))
    
    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)))
    

    不知何故相关的问题-

    很高兴能提供帮助,不过您可能需要找到排序功能。欢迎使用scala
    data.map(u.toSet).toSet
    应该足够了,我想我很乐意为您提供帮助,不过您可能需要找到排序函数。欢迎使用scala
    data.map(u.toSet).toSet
    应该足够了,我认为scala 2.13的可能副本添加了
    distinctBy
    ,这在这里非常有用。2.12及更早版本没有。有人系统地浏览了我的个人资料,并对我在Stackoverflow上提供的所有问题和答案进行了否决。管理员们似乎也很满足于让它发生。因此,我想请这篇文章的任何后续访问者真诚地投票,并留下评论,解释你为什么认为这篇文章有用或不有用。我并不是想沉溺于一些可悲的针锋相对,我只是想帮助下一个人。非常感谢。Scala 2.13的可能副本通过
    添加了
    distinctBy,这在这里非常有用。2.12及更早版本没有。有人系统地浏览了我的个人资料,并对我在Stackoverflow上提供的所有问题和答案进行了否决。管理员们似乎也很满足于让它发生。因此,我想请这篇文章的任何后续访问者真诚地投票,并留下评论,解释你为什么认为这篇文章有用或不有用。我并不是想沉溺于一些可悲的针锋相对,我只是想帮助下一个人。非常感谢。