2011-07-18 64 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