list - Scala将Collection转换为Key-key的最佳方法? (第二变种)

标签 list scala map scala-collections

(这是this Q&A的变体)

说我有这个:

List( "foo", "bar", "spam" )

我想创建一个Map,其键为String的长度,值为所有具有该长度的String的Collection。换句话说,给定about列表,我们将得到:
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 )
}

此方法有效,但在Daniel Spiewak为原始问题(上面已引用)提供的优雅答案中增加了很多麻烦。

有什么想法可以改善我的变体的解决方案吗?

谢谢!
肖恩

最佳答案

使用Scala 2.8.0:

list.groupBy(_.length)

没有比这更简单的了!

关于list - Scala将Collection转换为Key-key的最佳方法? (第二变种),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1209687/

相关文章:

java - 实例化后,列表可以以某种方式分配给另一个类的列表吗?

xml - 如何使用 scala.xml 添加 xml 文档信息?

scala - Akka 拦截具有可堆叠行为的接收

c++ - 通过 for 循环从 C++ 映射中删除元素

scala - Scala中有诸如双向 map 之类的东西吗?

c++ - 为什么 STL 算法 find() 在 map 上不起作用?

python - 如何将两个不同长度的列表合并为 Pandas 数据框?

python - 如何检查列表中元素的索引? (Python)

python - 根据上一个和下一个元素将元素插入到列表中

scala - `<:<`的隐式解析链是什么