3

Clojureのset/projectは、次のように順序を維持しません。

(project (map #(hash-map :number % :square (* % %)) (range 100)) #{:square})

順序を維持しながらそれを使用する慣用的な方法はありますか、それとも序数を明示的に追加して後で並べ替える必要がありますか?

4

1 に答える 1

2

のソース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))
于 2013-01-17T10:09:20.317 に答える