从哈希映射列表Clojure中提取值

时间:2016-01-28 12:44:46

标签: list clojure hashmap

我目前正在尝试从哈希映射列表中获取值。

  (def cards
  (hash-map
    :card1 {:name "Wisp" :damage 1 :health 1 :cost 0}
    :card2 {:name "Spider Tank" :damage 3 :health 4 :cost 3}
  )

我有一张带有“卡片”的哈希图。

(def deck1
      (list (get cards :card1) (get cards :card2) (get cards :card1))

这是一张卡片列表。 (我缩短了两个结构)

我想要做的是通过传递卡片名称来搜索这个卡片结构中的卡片。这张卡作为var保存并传递到其他地方。然后,我将在没有此卡的情况下重建列表。

所以,我正试图从牌组的任何地方抽取一张特定的牌。

目前我只是想拿到这张卡,但是我已经用代码打了一个死胡同。

(defn playCard [card]
(let [c first deck1 (get-in deck1 [card :name]))]
    (println "LOOK AT ME" c)))

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

以下是如何检索卡片的示例。我还重构了声明:

(def cards {:card1 {:health 1, :name "Wisp", :damage 1, :cost 0}, 
            :card2 {:health 4, :name "Spider Tank", :damage 3, :cost 3}})

(def deck [(:card1 cards)
           (:card2 cards)
           (:card1 cards)])

(defn find-first
     [f coll]
     (first (filter f coll)))

(find-first #(= (:name %) "Wisp") deck) ;; => {:health 1, :name "Wisp", :damage 1, :cost 0}

这假设您想要按姓名查找卡片(找到您已经存在的卡片没有意义)。