Clojure:获取单个值并在structmap中映射

时间:2010-09-30 21:42:51

标签: clojure clojureclr

我有一系列值,我从其他地方以已知的顺序得到。我也有一个单独的价值。这两个我想放入一个结构。即。

(defstruct location :name :id :type :visited)

现在我有一个清单

(list "Name" "Id" "Type")

这是正则表达式的结果。

然后我想把一个布尔值放入:visited;产生一个如下所示的结构:

{:name "Name" :id "Id" :type "Type" :visited true}

我该怎么做?我尝试了apply和struct-map的各种组合。我得到了:

(apply struct-map location (zipmap [:visited :name :id :type] (cons true (rest match))))

但这可能是错误的解决方法。

3 个答案:

答案 0 :(得分:3)

怎么样:

(def l (list "Name" "Id" "Type"))
(defstruct location :name :id :type :visited)
(assoc
   (apply struct location l)
   :visited true)

答案 1 :(得分:3)

如果你在1.2中,你应该使用记录而不是结构。

(defrecord location [name id type visited])

(defn getLoc [[name type id] visited] (location. name id type visited))

(getLoc (list "name" "type" "id") true)
#:user.location{:name "name", :id "id", :type "type", :visited true}

答案 2 :(得分:0)

您的版本看起来不错。通过into的一个小捷径:

user> (let [match (list "Name" "Id" "Type")]
        (into {:visited true} 
              (zipmap [:name :id :type] match)))
{:visited true, :type "Type", :id "Id", :name "Name"}

merge也会奏效。