Scala List function for grouping consecutive identical elements

后端 未结 8 2276
悲&欢浪女
悲&欢浪女 2020-12-05 08:00

Given e.g.:

List(5, 2, 3, 3, 3, 5, 5, 3, 3, 2, 2, 2)

I\'d like to get to:

List(List(5), List(2), List(3, 3, 3), List(5, 5),         


        
8条回答
  •  醉酒成梦
    2020-12-05 08:47

    This is the trick that I normally use:

    def split[T](list: List[T]) : List[List[T]] = list match {
      case Nil => Nil
      case h::t => val segment = list takeWhile {h ==}
        segment :: split(list drop segment.length)
    }
    

    Actually... It's not, I usually abstract over the collection type and optimize with tail recursion as well, but wanted to keep the answer simple.

提交回复
热议问题