In sostanza per lo stesso motivo per cui default partitioner cannot partition array keys.
Scala Array
è solo un involucro intorno matrice Java e la sua hashCode
non dipende tenore:
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
Ciò significa che due array con esattamente lo stesso contenuto non sono uguali
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
Come risultato Arrays
non può essere utilizzato come chiave significativa. Se non siete convinti basta controllare che cosa succede quando si utilizza Array
come chiave per la Scala Map
:
scala> Map(Array(1) -> 1, Array(1) -> 2)
res7: scala.collection.immutable.Map[Array[Int],Int] = Map(Array(1) -> 1, Array(1) -> 2)
Se si desidera utilizzare una raccolta come chiave si dovrebbe utilizzare una struttura dati immutabili come un Vector
o un List
.
scala> Map(Array(1).toVector -> 1, Array(1).toVector -> 2)
res15: scala.collection.immutable.Map[Vector[Int],Int] = Map(Vector(1) -> 2)
Consulta anche:
Potete per favore elaborare? Cosa vuoi fare con le chiavi? o cosa vuoi chiave che non puoi? – TravisJ