2015-04-04 5 views
0

Скажет, у меня есть целый список:Как разбить список по специальному элементу?

val list = List(1,2,3,4,5,3,6,7) 

Я хочу, чтобы разбить список на целое числе 3, так что я могу получить список списка:

list.splitBy(3) 
// returns List(List(1,2), List(4,5), List(6,7)) 

Есть ли встроенные или аккуратный способ сделать это?

+1

Я уверен, что это может быть сделано с 'fold' с двумя аккумуляторами, один для списка списков (результат сгиб) и один для вспомогательных списков, которые будут добавлены до тех пор, пока он не достигнет 3, а затем добавит этот список в список списков и очистит дополнительный список для следующего набора чисел. – cmbaxter

ответ

1

Это немного грубо, но что-то подобное может работать:

val list = List(1,2,3,4,5,3,6,7) 

println(splitListAt(list, 3)) 

def splitListAt(list:List[Int], toSplit:Int) = { 
    val (master, lastSub) = list.foldLeft((List.empty[List[Int]], List.empty[Int])){ 
    case ((master, sub), i) if i == toSplit => (master :+ sub, List.empty[Int]) 
    case ((master, sub), i) => (master, sub :+ i) 
    } 
    master :+ lastSub 
} 
Смежные вопросы