2
集/項目沒有維持秩序可以看出:Clojure集合/項目不維護秩序。該怎麼辦? Clojure中
(project (map #(hash-map :number % :square (* % %)) (range 100)) #{:square})
有沒有使用它,而維持秩序的習慣的方法或我將不得不明確添加序號和他們算賬排序?
集/項目沒有維持秩序可以看出:Clojure集合/項目不維護秩序。該怎麼辦? Clojure中
(project (map #(hash-map :number % :square (* % %)) (range 100)) #{:square})
有沒有使用它,而維持秩序的習慣的方法或我將不得不明確添加序號和他們算賬排序?
的clojure.set/project
來源:
(defn project
"Returns a rel of the elements of xrel with only the keys in ks"
{:added "1.0"}
[xrel ks]
(set (map #(select-keys % ks) xrel)))
你需要實現自己的project
無需轉換結果爲set
(defn my-project [xrel ks]
(map #(select-keys % ks) xrel))
測試:
(my-project (map #(hash-map :number % :square %)
(range 100))
#{:square})
=> ({:square 0}
{:square 1}
{:square 2}
{:square 3}
...
{:square 99})
更新。另一個版本:
(defn my-project2 [xrel ks]
(map (fn [m] (into {} (filter #(ks (key %)) m)))
xrel))
..這引出了一個問題:在庫中使用set有什麼好處?對我來說,由於相同的鍵僅被表示一次,所以投影的結果可能具有不同的計數。 –
@MarcusJuniusBrutus直到你問起,我纔看過這個函數。我只能假設它是因爲'project'是'clojure.set'的一部分,它被設計用來處理sets(?)。 – mobyte
'clojure.set'的目的是作爲一個輕量級的實現關係代數與代表關係的地圖集合一起工作。請參閱[本博客文章](http://www.lshift.net/blog/2010/08/21/some-relational-algebra-with-datatypes-in-clojure-12)以獲取概述。 '項目'旨在與'join','select'等配合使用。 –