Last active
December 20, 2015 09:28
-
-
Save v6ak/6107624 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| Zrada na tříděných kolekcích. Poskytnu vlastní třídění (zde podle absolutní hodnoty) a nevložím dva podle tohoto třídění ekvivalentní prvky (např. 8 a -8). Vždy tam bude jen jeden z nich. | |
| Co se divím? Pokud chci lepší prioritní frontu (PriorityQueue z nějakého důvodu nestačí) a řeším to pomocí SortedSet, kterou chci třídit podle priority. mám problém. Jakmile mám dva prvky se stejnou prioritou, zůstane jen jeden. Což je na první pohled dost neintuitivní a člověk hledá chybu někde jinde... | |
| Tuto vlastnost má evidentně TreeSet ve Scale. Má ji AFAIK i TreeSet v Javě. (Někde jsem o tom asi četl, ale samozřejmě jsem si na to nevzpomněl, když bylo potřeba...) a mohou ji mít i kolekce v jiných jazycích. Tak se nespalte. Čtěte dokumentaci. Pokud o tomto v dokumentac není zmínka, vyzkoušejte si to na jednoduchém příkladě. | |
| */ | |
| // Tady je záznam z konzole, který demonstruje tuto nepříjemnou vlastnost ve Scale. | |
| scala> collection.mutable.SortedSet[Int]()(Ordering.by(_.abs)) | |
| res10: scala.collection.mutable.SortedSet[Int] = TreeSet() | |
| scala> res10 += 10 | |
| res11: res10.type = TreeSet(10) | |
| scala> res10 += 9 | |
| res12: res10.type = TreeSet(9, 10) | |
| scala> res10 += 8 | |
| res13: res10.type = TreeSet(8, 9, 10) | |
| scala> res10 += -8 | |
| res14: res10.type = TreeSet(8, 9, 10) | |
| scala> res10 += -7 | |
| res15: res10.type = TreeSet(-7, 8, 9, 10) | |
| scala> res10 += 7 | |
| res16: res10.type = TreeSet(-7, 8, 9, 10) | |
| scala> res10 += 5 | |
| res17: res10.type = TreeSet(5, -7, 8, 9, 10) | |
| scala> res10 += -5 | |
| res18: res10.type = TreeSet(5, -7, 8, 9, 10) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment