Załóżmy, że mam listę krotek List[(A, B)]
. Jaki jest najlepszy sposób przekonwertowania go na multimap
, który mapuje A
na Set[B]
? Czy mogę zbudować niezmiennymultimap
?Jak zbudować multimapę z listy krotek w Scali?
21
A
Odpowiedz
20
mogę zbudować niezmienny multimap?
Nie ze standardową biblioteką Scala MultiMap
. Oczywiście możesz napisać własną.
Jaki jest najlepszy sposób przekonwertowania go na multimap?
import scala.collection.mutable.{HashMap, Set, MultiMap}
def list2multimap[A, B](list: List[(A, B)]) =
list.foldLeft(new HashMap[A, Set[B]] with MultiMap[A, B]){(acc, pair) => acc.addBinding(pair._1, pair._2)}
14
jestem nieco zdezorientowany, Multimap
nie mapuje A
do Set[B]
, mapuje A
do B
gdzie B
może mieć wiele wartości. Ponieważ chcesz czegoś niezmiennego, zamierzam zmienić to na Map[A, Set[B]]
, które nie jest Multimap
, ale robi jedną z rzeczy, o których mówiłeś.
// This is your list of (A, B)
val l = List((1, "hi"),
(2, "there"),
(1, "what's"),
(3, "up?"))
// Group it and snip out the duplicate 'A'
// i.e. it initially is Map[A, List[(A, B)]] and we're going to convert it
// to Map[A, Set[B]]
val m = l.groupBy(e => e._1).mapValues(e => e.map(x => x._2).toSet)
println(m)
// Prints: Map(3 -> Set(up?), 1 -> Set(hi, what's), 2 -> Set(there))
Powiązane problemy
- 1. Powtarzanie listy w Scali
- 2. Suma listy opcji w Scali
- 3. w Pythonie, Jak dołączyć do listy krotek do jednej listy?
- 4. Usuwanie elementu z listy MutableList w Scali
- 5. Jak zbudować obiekt obrazu w PIL/Pythonie
- 6. uzyskać konkretną pozycję z listy krotek C#
- 7. Jak wyodrębnić n-te elementy z listy krotek w python?
- 8. Jak utworzyć mapę z listy dwóch krotek przedmiotów w eliksiru
- 9. Utwórz HashMap w Scali z listy obiektów bez zapętlenia
- 10. Obróć multimapę w zbiór zestawów
- 11. Dodaj tuple do listy krotek w Pythonie
- 12. suma każda wartość w postaci listy krotek
- 13. Używanie strzałek w celu złożenia listy krotek
- 14. zbierać każdą parę elementów z listy do krotek w Pythonie
- 15. sortowanie listy krotek według dowolnego klucza
- 16. Zapytanie nazwane JPA pasuje do listy krotek w klauzuli IN
- 17. PYTHON: Konwertowanie listy krotek do słownika
- 18. Scala, konwertowania wielu list do listy krotek
- 19. Konwersja DICT zagnieżdżonych list do listy krotek
- 20. Sortowanie listy krotek bez czułości przypadku
- 21. Lista listach do listy krotek, kolejność
- 22. Składanie listy krotek za pomocą Scala
- 23. Uzyskiwanie wartości z mapy podanej listy kluczy w Scali
- 24. python - iteracji nad podzbiór listy krotek
- 25. Usuń krotkę z listy krotek, jeśli spełniony jest pewien warunek
- 26. bardziej pythonic sposób sformatować ciąg JSON z listy krotek
- 27. Enum krotek w Swift
- 28. Efektywnie skonstruuj Pandas DataFrame z dużej listy krotek/wierszy
- 29. Elegancki sposób na stworzenie słownika par z listy krotek?
- 30. Konwersja wyjścia z itertools.permutations z listy krotek do listy ciągów znaków
Można również użyć 'mapValues', który nie będzie faktycznie produkują nową kolekcję, ale będzie działać jako odwzorowanym' view' na wartości. –
'mapValues' - nice. Nigdy wcześniej tego nie używałem. Zaktualizowany do użycia w zamian. –
cleaner still: 'val m = l groupBy (_._ 1) mapValues (_ map {_._ 2} toSet)' –