La siguiente le daría un método groupByOrdered
que se comporta como usted buscó.
import collection.mutable.{LinkedHashMap, LinkedHashSet, Map => MutableMap}
object GroupByOrderedImplicit {
implicit class GroupByOrderedImplicitImpl[A](val t: Traversable[A]) extends AnyVal {
def groupByOrdered[K](f: A => K): MutableMap[K, LinkedHashSet[A]] = {
val map = LinkedHashMap[K,LinkedHashSet[A]]().withDefault(_ => LinkedHashSet[A]())
for (i <- t) {
val key = f(i)
map(key) = map(key) + i
}
map
}
}
}
Cuando utilizo este código como:
import GroupByOrderedImplicit._
0.to(100).groupByOrdered(_ % 10).foreach(println)
me sale el siguiente resultado:
(0,Set(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100))
(1,Set(1, 11, 21, 31, 41, 51, 61, 71, 81, 91))
(2,Set(2, 12, 22, 32, 42, 52, 62, 72, 82, 92))
(3,Set(3, 13, 23, 33, 43, 53, 63, 73, 83, 93))
(4,Set(4, 14, 24, 34, 44, 54, 64, 74, 84, 94))
(5,Set(5, 15, 25, 35, 45, 55, 65, 75, 85, 95))
(6,Set(6, 16, 26, 36, 46, 56, 66, 76, 86, 96))
(7,Set(7, 17, 27, 37, 47, 57, 67, 77, 87, 97))
(8,Set(8, 18, 28, 38, 48, 58, 68, 78, 88, 98))
(9,Set(9, 19, 29, 39, 49, 59, 69, 79, 89, 99))
"El orden de los elementos en cada entrada ya está conservado", ¿esto está garantizado? No parece decir mucho al respecto en el documento API. – Mortimer
@Mortimer Si los documentos de la API no lo dicen, supongo que en teoría no está garantizado (aunque los documentos en general son bastante pobres). El orden de los elementos solo es significativo para 'Seq's, mientras que este método es genérico sobre todos los' Traversable's, pero dado que la implementación usa una expresión para para recorrer los elementos, siempre será cierto para 'Seq's . –
bien, eso es lo que pensé. Tendré que asegurarme de que se mantengan ordenadas entonces. Gracias. – Mortimer