This StackOverflow答案完全描述了HashSet
是無序的,其項目枚舉順序是未定義的,不應該依賴。HashSet是否在枚舉之間保持順序?
然而,
這帶來anouther問題:我應該還是我不應該依賴於兩個sebsequent枚舉之間的enumeraetion順序?鑑於沒有插入或清除。
例如,可以說我增加了一些項目到HashSet:
HashSet<int> set = new HashSet<int>();
set.Add(1);
set.Add(2);
set.Add(3);
set.Add(4);
set.Add(5);
現在,當我通過foreach
枚舉此集合,讓我們說,我收到此序列:
// Result: 1, 3, 4, 5, 2.
問題是:如果我沒有插入/刪除,我是否再次枚舉集合,那麼這個命令是否會保留? 它會永遠是一樣的?
即使這是真的,那應該被記錄下來。既然不是,我不會依賴它。隨着未來的框架更新,它可能會隨時出現在你面前。爲什麼在地球上你會使用散列,如果你需要一個保證的枚舉順序。根據您的要求,這絕對是您選擇用於建模數據的錯誤數據結構。 –
由於哈希集合基本上是一個具有固定時隙順序的哈希表,是的,如果根本不修改集合,則迭代順序是恆定的。你應該依賴那個嗎?不,我不這麼認爲,你應該避免必須依賴這一點。 – poke
那麼,我試圖只依靠一個集合的兩個順序枚舉的順序,就是這樣。我需要的數據結構是O(1)add/remove加上上述問題的肯定答案。有沒有? – AgentFire