Jeśli mam kolekcję c
typu T
i nie jest własnością p
na T
(typu P
, powiedzmy), co jest najlepszym sposobem, aby zrobić mapa po ekstrakcji-key?Scala najlepszy sposób przekształcania kolekcji w mapę po klawiszu?
val c: Collection[T]
val m: Map[P, T]
Jednym ze sposobów jest następująca:
m = new HashMap[P, T]
c foreach { t => m add (t.getP, t) }
Ale teraz muszę zmienny mapę. Czy jest lepszy sposób na zrobienie tego, aby był w jednej linii, a kończy na niezmiennej niezmiennej Map? (Oczywiście mogłem zamienić powyższe w proste narzędzie biblioteki, tak jak w Javie, ale podejrzewam, że w Scali nie ma potrzeby)
Nadal wolę moje sugestie w trendzie 'Traversable [K] .mapTo (K => V)' i 'Traversalable [V] .mapBy (V => K)' były lepsze! –
Jako alternatywa, zip: 'c map (_.getP) zip c toMap' – onof
Należy pamiętać, że jest to operacja kwadratowa, ale to samo dotyczy większości innych wariantów tutaj podanych. Patrząc na kod źródłowy scala.collection.mutable.MapBuilder itp., Wydaje mi się, że dla każdej krotki tworzona jest nowa niezmienna mapa, do której dodawana jest krotka. –