Scala 如何根据每个元素的属性对列表进行分区
我有一个关于按每个列表元素的属性划分列表的问题 给定一个Scala 如何根据每个元素的属性对列表进行分区,scala,partitioning,Scala,Partitioning,我有一个关于按每个列表元素的属性划分列表的问题 给定一个List[E]和一个函数f(E:E):Int如何将列表划分为List[E],其中每个元素都是应用f时具有相同值的元素的List[E] 例如,假设类型E表示物理位移,而f测量位移,得到大于或等于零的整数 val ms = List(a, b, c, d, e) f(a) = 1 f(b) = 3 f(c) = 1 f(d) = 4 f(e) = 3 由此产生的分区将是 List(List(a, c), List(b, e), List(d
List[E]
和一个函数f(E:E):Int
如何将列表划分为List[E]
,其中每个元素都是应用f
时具有相同值的元素的List[E]
例如,假设类型E
表示物理位移,而f
测量位移,得到大于或等于零的整数
val ms = List(a, b, c, d, e)
f(a) = 1
f(b) = 3
f(c) = 1
f(d) = 4
f(e) = 3
由此产生的分区将是
List(List(a, c), List(b, e), List(d))
此示例显示f
的值可以包含间隙,但列表列表不应包含任何空列表。只需将它们分组:
val ms = List(a, b, c, d, e)
ms.groupBy(x => f(x)).values
如果希望列表按函数值排序:
list.groupBy(f).toList.sortBy(_._1).map(_._2)
或者更惯用的用法是:
ms.groupBy(f).values
要使其成为实际列表,必须添加.toList