(это вариант этого Q & A )
Скажи, что у меня есть:
List( "foo", "bar", "spam" )
Я хочу создать карту, для которой ключ - это длина строки, а значение - это коллекция всех строк, имеющих эту длину. Другими словами, учитывая список, мы получили бы:
Map( 3 -> List(foo, bar), 4 -> List(spam) )
Код, который я написал для этого:
list.foldLeft(Map[Long, List[String]]()) {
(m, s) => m(s.length) = s ::
( if ( m.contains(s.length) ) m(s.length)
else Nil )
}
Это работает, но это добавляет много уродства к элегантному ответу Даниэля Спивака, предоставленному на первоначальный вопрос (ссылка выше).
Есть идеи, как улучшить решение для моего варианта?
Спасибо!
Шон