2011-07-18 9 views
8

El apidoc de distinct en SeqLike dice:Scala SeqLike orden de conservación distinta?

construye una nueva secuencia de esta secuencia sin elementos duplicados. Devoluciones: una nueva secuencia que contiene la primera aparición de cada elemento de esta secuencia.

¿Considero correcto que no se ofrece garantía de pedido? De manera más general, ¿los métodos de SeqLike proporcionan alguna garantía de proceso en el pedido (y devolución en el pedido)?

Respuesta

9

Por el contrario: las operaciones en Seq s garantizan el orden de salida (a menos que la API indique lo contrario). Esta es una de las propiedades básicas de las secuencias, donde importa el orden, frente a los conjuntos, donde solo importa la contención.

+0

¿Entonces SeqLike no tiene que garantizar pero Seq tiene? – ron

+0

No creo que esto sea técnicamente correcto. Si bien las secuencias obviamente tienen orden, no pude encontrar nada que mencionara preservarlo en cada operación. Estoy de acuerdo en que algunas personas esperarían esto, pero no creo que una implementación que coloque elementos de secuencia en un 'Conjunto' y los devuelva en cualquier orden violaría cualquier contrato. Dicho esto, creo que la implementación actual preserva el orden. – pazabo

+0

@pazabo Probablemente tenga razón en que no hay una garantía sólida, ni de una especificación, ni, por supuesto, de ninguna herramienta, compilador, linter, etc., pero cualquiera que vaya en contra de este principio puede ser acusado fácilmente de violar el principio de menos sorpresa, y la lib estándar no lo hace. –

1

Depende de la colección que estaba utilizando en primer lugar. Si tuviera una lista, recibirá su pedido. Si, por otro lado, tienes un conjunto, entonces probablemente no.

+0

Sin embargo, un conjunto no es SeqLike y los OP dicen que la colección a la que se hace referencia es SeqLike –

+0

Sí, creo que mi respuesta es más general ... Debería haberme expresado más claramente. – agilesteel

Cuestiones relacionadas