我目前正在尝试从哈希映射列表中获取值。
(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)))
任何帮助将不胜感激。
答案 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}
这假设您想要按姓名查找卡片(找到您已经存在的卡片没有意义)。