Im Grunde aus dem gleichen Grund, warum default partitioner cannot partition array keys.
Scala Array
ist nur ein Wrapper um Java-Array und seine hashCode
hängt nicht von einem Inhalt:
scala> val x = Array(1, 2, 3)
x: Array[Int] = Array(1, 2, 3)
scala> val h = x.hashCode
h: Int = 630226932
scala> x(0) = -1
scala> x.hashCode() == h1
res3: Boolean = true
Es bedeutet, dass zwei Arrays mit exakt den gleichen Inhalt nicht gleich sind
scala> x
res4: Array[Int] = Array(-1, 2, 3)
scala> val y = Array(-1, 2, 3)
y: Array[Int] = Array(-1, 2, 3)
scala> y == x
res5: Boolean = false
Als Ergebnis kann Arrays
nicht als sinnvolle Schlüssel verwendet werden. Wenn Sie nicht überzeugt, nur überprüfen, was passiert, wenn Sie Array
als Schlüssel für Scala verwenden Map
:
scala> Map(Array(1) -> 1, Array(1) -> 2)
res7: scala.collection.immutable.Map[Array[Int],Int] = Map(Array(1) -> 1, Array(1) -> 2)
Wenn Sie eine Sammlung als Schlüssel verwenden möchten, sollten Sie eine unveränderliche Datenstruktur wie ein Vector
oder List
verwenden.
scala> Map(Array(1).toVector -> 1, Array(1).toVector -> 2)
res15: scala.collection.immutable.Map[Vector[Int],Int] = Map(Vector(1) -> 2)
Siehe auch:
Können Sie bitte näher erläutern? Was willst du mit den Schlüsseln machen? oder was willst du eingeben, das kannst du nicht? – TravisJ