如何从Clojure中的地图列表中获取值

Odi*_*din 3 clojure

我有一个地图列表,我希望在给定某个"columnId"的情况下检索"field"的值.

(def field-to-column-mapping
   [{"field" "first_name", "columnId" "1"}
    {"field" "last_name", "columnId" "2"}
    {"field" "phone", "columnId" "3"}])


(defn get-field-given-column [id]
  ((some #(if (= id (get % "columnId")) %)
         field-to-column-mapping)
   "field"))

 ;; Gets "first_name"
 (get-field-given-column "1")
Run Code Online (Sandbox Code Playgroud)

这有效,但我的直觉告诉我必须有一个更清洁的方法来做到这一点.

有没有更好的方法呢?

Art*_*ldt 5

使用a编写for它可能会使得它可能更清晰,同时与您的问题中的示例基本相同:

(defn get-field-given-column [id] 
   (for [row field-to-column-mapping :when (= (row "columnId") id)] 
      (row "field")))

> (get-field-given-column "1")
("first_name")
Run Code Online (Sandbox Code Playgroud)

这将返回一系列答案,因为多个行可能具有相同的键.如果确实只有一个,那么添加一个电话first.