(This is a variant to this Q&A)
Say I have this:
List( "foo", "bar", "spam" )
I want to create a Map for which the key is the length of the String and the value is a Collection of all the Strings that have that length. In other words, given the about List, we'd get:
Map( 3 -> List(foo, bar), 4 -> List(spam) )
The code I've written to do this is:
list.foldLeft(Map[Long, List[String]]()) {
(m, s) => m(s.length) = s ::
( if ( m.contains(s.length) ) m(s.length)
else Nil )
}
This works, but it adds a lot of ugliness to the elegant answer Daniel Spiewak provided to the original question (referenced above).
Any ideas how to improve the solution for my variant?
Thanks! Sean