Это сгруппирует все идентичные элементы, а не только последовательные.

вая, например:

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

Я хотел бы добраться до:

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

Я бы предположил, что есть простая функция List, которая делает это, но не может ее найти.

 Eneko Alonso20 июн. 2013 г., 06:11
Проблемы с 99 скалами?

Ответы на вопрос(1)

Решение Вопроса

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

На самом деле ... Это не так, я обычно абстрагируюсь от типа коллекции и оптимизирую также с помощью хвостовой рекурсии, но хотел, чтобы ответ был простым.

 Knut Arne Vedaa21 янв. 2011 г., 18:38
Приятно. Но разве это не будет достаточно распространенным, чтобы гарантировать его собственную библиотечную функцию?
 vishvAs vAsuki29 февр. 2016 г., 02:10
Не берите в голову - я только что узнал о tailrec. Кроме того, как сделать это с ленивой оценкой, если у вас есть Iterable вместо списка?
 dskrvk23 июн. 2016 г., 03:41
@vishvAs vAsuki: опубликовал индивидуальное решениениже
 Kevin Wright21 янв. 2011 г., 18:44
Там нет никаких аргументов, это, конечно, возникают вопросы не раз ...
 vishvAs vAsuki29 февр. 2016 г., 01:50
@KevinWright "оптимизировать также с помощью хвостовой рекурсии" -> Как бы вы это сделали?

Ваш ответ на вопрос