In Java haben wir zwei nette Klassen: EnumSet
für Sätze von enum
s und EnumMap
für eine Karte, deren Schlüssel sind enum
s. EnumSet
wird als ein 64-Bit-Wort (oder ein Array von 64-Bit-Wörtern) und EnumMap
als ein Array von Werten dargestellt, die beide durch die Ordnungszahlen von enum
s indiziert sind. So fügen Sie ein/suchen/entfernen/... Operationen nur O (1) Zeit.Gibt es eine Scala-Entsprechung von EnumSet/EnumMap?
Haben wir sowas in Scala - veränderlich oder unveränderlich?
Ich fand BitSet (sowohl veränderlich und unveränderlich), die auf Ganzzahlen arbeitet, so nahm ich an, dass es eine effiziente Implementierung von Sets von Enumeration
geben würde. Value
s davon gesichert. Aber ich habe nur Enumeration.ValueSet
gefunden, was backed up by SortedSet[Int] ist. Obwohl das nicht so schlecht ist, scheint BitSet
für diesen Zweck ziemlich effizient zu sein.
Ich habe keine optimierte Implementierung von Karten mit Enumeration.Value
als Schlüssel ähnlich wie EnumMap
gefunden.
Im Gegensatz zu Java 'enum's, Scala' Enumeration' Werte können beliebige numerische Kennungen haben und deshalb habe ich vermute, dass es keine direkte Entsprechung für Java 'EnumSet' ist und' EnumMap' in Scala. – ghik
@ghik Während das stimmt, würde ich sagen, dass diese Funktion nur selten verwendet wird. Und wenn jemand großen Zahlen Werte zuweisen würde, wäre es seine Verantwortung, einfach eine andere "Set"/"Map" Implementierung zu verwenden. –
@ghik Tatsächlich ist das eine Fehlerquelle in 2.10 impl. –