Dlaczego niezmienna wersja magazynu ListMap zapisuje się w porządku rosnącym, a wersja zmienna przechowuje w porządku malejącym?Dlaczego zmienne i niezmienne mapy listy mają różne porządki w Scali?
Oto test, który można użyć, jeśli masz scalatest-1.6.1.jar i JUnit-4.9.jar
@Test def StackoverflowQuestion()
{
val map = Map("A" -> 5, "B" -> 12, "C" -> 2, "D" -> 9, "E" -> 18)
val sortedIMMUTABLEMap = collection.immutable.ListMap[String, Int](map.toList.sortBy[Int](_._2): _*)
println("head : " + sortedIMMUTABLEMap.head._2)
println("last : " + sortedIMMUTABLEMap.last._2)
sortedIMMUTABLEMap.foreach(X => println(X))
assert(sortedIMMUTABLEMap.head._2 < sortedIMMUTABLEMap.last._2)
val sortedMUTABLEMap = collection.mutable.ListMap[String, Int](map.toList.sortBy[Int](_._2): _*)
println("head : " + sortedMUTABLEMap.head._2)
println("last : " + sortedMUTABLEMap.last._2)
sortedMUTABLEMap.foreach(X => println(X))
assert(sortedMUTABLEMap.head._2 > sortedMUTABLEMap.last._2)
}
Herezje wyjście z testu Podania:
head : 2
last : 18
(C,2)
(A,5)
(D,9)
(B,12)
(E,18)
head : 18
last : 2
(E,18)
(B,12)
(D,9)
(A,5)
(C,2)
Jedną z głównych korzyści z dobrej zbiorów API jest to, że chroni Cię od konieczności „wyczerpująco poznać wszystkie dziwactwa jak to". Kolejność iteracji nie jest częścią kontraktu 'ListMap', więc nigdy nie musisz o tym myśleć. –
Mniej specyficzny opis interfejsu pozostawia więcej miejsca na przyszłe zmiany/ulepszenia. Jeśli chcesz zachować niezawodne zachowanie w zakresie kolejności elementów, użyj "SortedMap". – Raphael
Dzięki posortowanej mapie działa dobrze dla mnie. – Zasz