Estaba mirando un ejemplo de conjunto para scala y noté que cuando se crearon los estados 3 el compilador cambió el orden de los miembros de ese conjunto, Wyoming estaba en el tercer lugar y ahora era el último. ¿Podría alguien explicarme si esto sucede?

scala> val states = Set("Alabama", "Alaska", "Wyoming")
states: scala.collection.immutable.Set[String] = Set(Alabama, Alaska, Wyoming)
scala> val states2 = states + "Virginia"
states2: scala.collection.immutable.Set[String] =
Set(Alabama, Alaska, Wyoming, Virginia)
scala> val states3 = states2 + ("New York", "Illinois")
states3: scala.collection.immutable.Set[String] =
Set(Alaska, Virginia, Alabama, New York, Illinois, Wyoming)

Ejemplo tomado de Programming Scala: Scalability = Functional Programming + Objects por Dean Wampler

2
mahdi 25 jun. 2020 a las 21:51

2 respuestas

La mejor respuesta

Set solo por su propia garantía, que el mismo elemento no puede insertarse dos veces (por el mismo entendemos el resultado true de la comparación == / .equals con .hashcode hacer coincidir .equals para completar el contrato). Si su tipo es solo Set, no hay garantías sobre el orden, lo que probablemente significa que será HashSet lo que optimiza la estructura interna para una fácil comparación .hashcode.

Si desea conservar el orden de inserción (suponiendo que el mismo elemento insertado dos veces no cambiará el orden de su primera inserción), utilice ListSet.

Si desea ordenar el elemento de acuerdo con algunos Ordering use SortedSet.

1
Mateusz Kubuszok 25 jun. 2020 a las 19:16

¿Scala cambia automáticamente el orden de los datos en conjuntos?

No, no lo hace por la simple razón de que Set s no tiene un pedido, y no puede cambiar algo que no existe.

Tenga en cuenta que esto no es nada específico de Scala, ni siquiera de la programación. Eso es parte de la naturaleza de los sets en general.

0
Jörg W Mittag 25 jun. 2020 a las 19:32