列表、地图等中的groupBy方法在函数之后生成一个地图。
有没有一种方法可以使用groupBy生成保持插入顺序的映射(例如LinkedHashMap)?
我使用for循环来手动插入,但我想知道是否有一个有用的已定义函数可以帮助我。
提前谢谢。
发布于 2012-03-07 11:30:05
TraversableLike上定义的groupBy会生成一个immutable.Map,所以您不能让此方法生成其他内容。
已经保留了每个条目中元素的顺序,但没有保留键的顺序。键是所提供函数的结果,因此它们实际上没有顺序。
如果你想根据一个特定的键第一次出现的情况下订单,这里有一个你可以做的草图。假设我们想按整数的值/2对它们进行分组:
val m = List(4, 0, 5, 1, 2, 6, 3).zipWithIndex groupBy (_._1 / 2)
val lhm = LinkedHashMap(m.toSeq sortBy (_._2.head._2): _*)
lhm mapValues (_ map (_._1))
// Map(2 -> List(4, 5), 0 -> List(0, 1), 1 -> List(2, 3), 3 -> List(6))
// Note order of keys is same as first occurrence in original listhttps://stackoverflow.com/questions/9594431
复制相似问题