在地图矢量中访问Clojure地图的元素

时间:2016-02-29 10:10:43

标签: clojure

我有:

(def moo (my-func))

返回:

[{:id 1 :name "Bob"}
 {:id 2 :name "Jane"}
 {:id 3 :name "Greg"}]

我现在如何访问moo以获取:name :id=3的位置?感谢。

3 个答案:

答案 0 :(得分:4)

我更愿意使用some(因为它比使用filter更合乎逻辑我猜,因为它只是为了找到一个值而设计):

(def data
  [{:id 1 :name "Bob"}
   {:id 2 :name "Jane"}
   {:id 3 :name "Greg"}])

(defn name-by-id [id data]
  (some #(when (= (:id %) id) (:name %)) data))

user> 
(name-by-id 3 data)
"Greg"
user> 
(name-by-id 100 data)
nil

答案 1 :(得分:1)

一种方法是使用filter

(def moos
  [{:id 1 :name "Bob"}
   {:id 2 :name "Jane"}
   {:id 3 :name "Greg"}])

(defn name-for-id
  [id]
  (:name (first (filter #(= (:id %) id) moos))))

(name-for-id 3) ; => "Greg"

答案 2 :(得分:0)

(def names
  [{:id 1 :name "Bob"}
   {:id 2 :name "Jane"}
   {:id 3 :name "Greg"}])

;;get the :name where :id=3
(defn answer []
  (:name (first (filter (fn [e] (= 3 (:id e))) names))))

在上面而不是names,您可以拥有moo