2014-03-03 41 views

回答

13

由於集數據結構是,根據定義,無序:http://en.wikipedia.org/wiki/Set_(data_structure)

爲了MOR e精確的,Clojure的內置集合(其中#{blah blah blah}爲您提供)是一個哈希集合 - 即由哈希表(http://en.wikipedia.org/wiki/Hash_tables)支持的集合。它爲您提供以下保證:

  • 每個元素的唯一性(不允許重複)。
  • O(1)插入和包容檢查的性能特徵。
  • 迭代工作 - 調用seq將爲您提供集合中的每個元素,但是以未定義的順序。

未定義的順序在這裏意味着迭代順序取決於您在集合中插入的元素,它們的編號,插入它們的順序,您可能在之前設置的所有其他操作,和其他各種實施細則可能從語言版本更改爲其他(甚至之間實現 - 你可能會,也可能會,獲得Clojure的,Clojure的不同的結果在64位JVM上運行,或ClojureScript)。

重要的是要帶走的是,如果你正在編寫與套(或地圖)代碼工作,從來沒有讓它依賴於說套/地圖的順序任何概念。它會中斷。

12

#{3 1 22 44}是Clojure中,這是不按順序排列set

因此,當您對一個集合執行seq時,生成的seq的順序是任意的(但每次在此實例上調用seq時都是一樣的)。

如果您想對該組進行排序,您可以使用sorted-set

創建排序集
相關問題