2011-07-18 34 views
8

distinctSeqLike的apidoc说:斯卡拉SeqLike明显保留订单?

构建从这个序列的新序列,没有任何重复的元素。 返回:包含此序列的每个元素的第一个出现的新序列。

我觉得没有订单保证是正确的吗?更一般地说,SeqLike的方法是否提供了任何过程顺序(和顺序退货)保证?

回答

9

相反:Seq上的操作确保输出顺序(除非API另有说明)。这是序列的基本属性之一,其中顺序很重要,而对于只有遏制才重要的集合。

+0

所以SeqLike不必保证,但Seq有? – ron

+0

我不认为这在技术上是正确的。虽然序列显然有序,但我无法找到任何可以在每次操作中保留它的内容。我同意有些人会期望这样做,但我不认为将序列项放入Set中并以任何顺序返回的实现都会违反任何合同。话虽如此,我相信目前的实施保持秩序。 – pazabo

+0

@pazabo你可能是对的,没有强有力的保证 - 既不是来自规范,当然也不是来自任何工具,编译器,linter等,但任何违背这个原则的人都很容易被指责违反了原则最少惊喜,而标准库并不这样做。 –

1

这取决于您首先使用的集合。如果你有一个清单,你会得到你的订单。如果另一方面,你有一套,那么可能不是。

+0

一套不是SeqLike,虽然和OP的陈述集合提到是SeqLike –

+0

是的,我想我的答案是更一般的...我应该更清楚地表达自己。 – agilesteel