我正在努力学习clojure。
我正在调用一个函数,它返回一个字符串数组..
如果我这样做:
(let [items (get-all-items)]
(println (type items))
(items))
type
的{{1}}显示为items
,其中class clojure.lang.PersistentVector
值如此:
items
我想将此格式转换为地图,格式如下:
[["Dogs"] ["Cats"] ["Capybaras"] ["Pygmy Hedgehogs"]]
这有意义吗? Clojure地图可以包含字符串列表吗?
我只是这样做,因为如果我将它作为地图,我可以检查列表中是否有像这样的宠物:
{ "Dogs" "Cats" "Capybaras" "Pygmy Hedgehogs" }
如果(contains? pets "Dogs")
; assuming the map is stored in pets variable
是向量,则失败。
所以,如果我可以将其转换为地图,我该如何转换它?如果没有,我如何在矢量中搜索某些内容?
(我喜欢使用地图,所以我宁愿有地图 - 除非有充分的理由不这样做)
ps:我尝试使用into转换,但这也不起作用。
答案 0 :(得分:3)
我怀疑你真正想要的是集,而不是地图。地图存储与特定密钥关联的值。设置存储唯一的值列表。
如果您的唯一用例是测试成员资格,那么您肯定需要集。如果您还要将某些数据与该密钥相关联,则需要地图。
从任何序列生成集合非常容易。在你的情况下:
(set (flatten items))
;;=> #{"Pygmy Hedgehogs" "Dogs" "Cats" "Capybaras"}
答案 1 :(得分:2)
(apply assoc {} (flatten [["Dogs"] ["Cats"] ["Capybaras"] ["Pygmy Hedgehogs"]]))
;;=> {"Capybaras" "Pygmy Hedgehogs", "Dogs" "Cats"}