вот код,
val arr = List(("A", 1), ("B", 2), ("A", 3), ("B", 1), ("A", 2), ("C", 4), ("B", 5), ("C", 2))
val res = arr.groupBy(x => x._1).map(x => x._2.maxBy(e => e._2))
получить результат как:
Map(A -> 3, C -> 4, B -> 5)
, но оператор groupby
в большом списке кортежей очень медленный , Я хочу использовать другой оператор, такой как foldleft
для достижения того же результата, к сожалению, я не могу достичь такой цели.
в моем вопросе scala
версия 2.10.5
последняя доля groupby source code
def groupBy[K](f: A => K): immutable.Map[K, Repr] = {
val m = mutable.Map.empty[K, Builder[A, Repr]]
for (elem <- this) {
val key = f(elem)
val bldr = m.getOrElseUpdate(key, newBuilder)
bldr += elem
}
val b = immutable.Map.newBuilder[K, Repr]
for ((k, v) <- m)
b += ((k, v.result))
b.result
}