LinkedHashMap
służy do zachowania kolejności reklamacji na mapie, ale działa to tylko w przypadku map zmiennych. Która z niezmiennych implementacji Map
zachowuje porządek reklamowy?Niezmienna Scala Implementacja mapy, która zachowuje zamówienie reklamowe
Odpowiedz
ListMap implementuje niezmienną mapę przy użyciu struktury danych opartej na listach, a tym samym zachowuje zamówienie reklamowe.
scala> import collection.immutable.ListMap
import collection.immutable.ListMap
scala> ListMap(1 -> 2) + (3 -> 4)
res31: scala.collection.immutable.ListMap[Int,Int] = Map(1 -> 2, 3 -> 4)
scala> res31 + (6 -> 9)
res32: scala.collection.immutable.ListMap[Int,Int] = Map(1 -> 2, 3 -> 4, 6 -> 9)
następującą metodę rozszerzenia - Seq#toListMap
może być bardzo przydatna podczas pracy z ListMap
s.
scala> import scalaz._, Scalaz._, Liskov._
import scalaz._
import Scalaz._
import Liskov._
scala> :paste
// Entering paste mode (ctrl-D to finish)
implicit def seqW[A](xs: Seq[A]) = new SeqW(xs)
class SeqW[A](xs: Seq[A]) {
def toListMap[B, C](implicit ev: A <~< (B, C)): ListMap[B, C] = {
ListMap(co[Seq, A, (B, C)](ev)(xs) : _*)
}
}
// Exiting paste mode, now interpreting.
seqW: [A](xs: Seq[A])SeqW[A]
defined class SeqW
scala> Seq((2, 4), (11, 89)).toListMap
res33: scala.collection.immutable.ListMap[Int,Int] = Map(2 -> 4, 11 -> 89)
Istnieje lista z ListMap - wywołanie aktualizacji() z istniejącym kluczem * zmiany * kolejność elementów. Przykład: 'ListMap (" a "→ 1," b "→ 2) .aktualizowane (" a ", 2) .toList' daje' List ((b, 2), (a, 2)) '. Bardzo niefortunne dla mojego przypadku użycia :( –
Podczas ListMap
zachowuje kolejność wstawiania nie jest bardzo skuteczny - np czas wyszukiwania jest liniowy. Proponuję utworzyć nową klasę kolekcji, która otoczy zarówno immutable.HashMap
, jak i immutable.TreeMap
. Niezmienna mapa powinna być sparametryzowana jako immutable.HashMap[Key, (Value, Long)]
, gdzie Long
w krotce daje wskaźnik do odpowiedniego wpisu w TreeMap[Long, Key]
. Następnie trzymasz licznik wpisów na boku. Ta mapa drzewa posortuje wpisy zgodnie ze zleceniem reklamowym.
Implementację wstawia się i przeszukuje w prosty sposób - zwiększa licznik, wstawia do mapy mieszania i wstawia do pary liczników w treemap. Do wyszukiwania używasz mapy mieszania.
Wykonujesz iterację za pomocą drzewa mapy.
Aby zaimplementować usunięcie, musisz usunąć parę klucz-wartość z mapy skrótu i użyć indeksu z krotki, aby usunąć odpowiedni wpis z drzewa mapy.
+1. Jakieś szanse na posiadanie takiej kolekcji w stdlib w niedalekiej przyszłości? – missingfaktor
To nie było planowane, ale jeśli dyskusja na liście dyskusyjnej Internals Scala ujawniła, że wiele osób chce tego , dlaczego nie, – axel22
Czy chcesz wyjaśnić, dlaczego? – axel22
- 1. Wydajna niezmienna implementacja mapy?
- 2. Kolekcja, która zachowa zamówienie reklamowe i nie będzie duplikatów.
- 3. Kolekcje Java utrzymujące zamówienie reklamowe
- 4. Scala SeqLike odrębna zachowuje porządek?
- 5. Czy grupa enumerable's group_by zachowuje zamówienie Enumerable?
- 6. Scala odpowiednik mapy Ruby?
- 7. Implementacja samoorganizującej się mapy (SOM)
- 8. Angular 2 implementacja mapy google
- 9. Nieoczekiwana Scala Typ mapy
- 10. Zaprojektuj klasę zmienną, która po jej zużyciu stanie się niezmienna.
- 11. Czy w Scali jest utrzymywana niezmienna kolejka priorytetowa?
- 12. Implementacja interfejsu Java w Scala
- 13. Dlaczego czcionka jest niezmienna?
- 14. Scala 2.8 TreeMap i niestandardowe zamówienie
- 15. scala lepsza składnia mapy getOrElse
- 16. Scala dla pętli na dwóch listach jednocześnie
- 17. Niezmienna tablica w Javie
- 18. Scala - funkcja mapy - Tylko zwrócony ostatni element mapy
- 19. Dopasowanie wzorców do elementów mapy Scala
- 20. Implementacja typowania strukturalnego OCaml, Scala i Go
- 21. Reklamowe Problem z Firebase
- 22. Elegancki sposób odwrócenia mapy w Scala
- 23. Potrzebuję niezmiennej struktury klucz-wartość, która zachowuje kolejność wprowadzania
- 24. Klasa Java, która implementuje mapę i zachowuje kolejność wstawiania?
- 25. Zmienna w skrypcie Bash, która zachowuje wartość od ostatniego uruchomienia
- 26. Thread.join nie zachowuje się tak, jak się spodziewałem w scala
- 27. Scala analogi QtConcurrent
- 28. Czy istnieje kolekcja, która zachowuje się jak kolejka, ale pozwala mi uzyskać wiele elementów jednocześnie?
- 29. błąd podczas weryfikacji dostępu Reklamowe
- 30. QuickBlox Reklamowe jest wymagany błąd
To nie jest dokładny duplikat, pytanie dotyczy mapy niezmiennej, domniemany duplikat dotyczy zarówno zmienności, jak i niezmienności. drugie pytanie nie * bezpośrednio * odpowiedź na niezmienną część (być może pośrednio) –