Skip to content

Instantly share code, notes, and snippets.

@v6ak
Last active December 20, 2015 09:28
Show Gist options
  • Select an option

  • Save v6ak/6107624 to your computer and use it in GitHub Desktop.

Select an option

Save v6ak/6107624 to your computer and use it in GitHub Desktop.
/*
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