gpt4 book ai didi

clojure - 将 clojure 持久向量转换为 map

转载 作者:行者123 更新时间:2023-12-05 01:48:13 26 4
gpt4 key购买 nike

我正在努力学习 clojure。

我正在调用一个返回字符串数组的函数..

如果我这样做:

(let [items (get-all-items)]
(println (type items))
(items))

itemstype 显示为 class clojure.lang.PersistentVector 其中 items 的值是像这样:

[["Dogs"] ["Cats"] ["Capybaras"] ["Pygmy Hedgehogs"]]

我想将其转换为格式如下的 map :

{ "Dogs" "Cats" "Capybaras" "Pygmy Hedgehogs" }

这有意义吗? Clojure 映射可以包含字符串列表,对吧?

我这样做只是因为如果我把它作为 map ,我可以像这样检查列表中是否有宠物:

(contains? pets "Dogs")
; assuming the map is stored in pets variable

如果 pets 是向量,则失败。

那么如果我可以将其转换为 map ,我该如何转换呢?如果没有,我如何在向量中搜索某些东西?

(我喜欢使用 map ,所以我宁愿使用 map - 除非有充分的理由不这样做)

ps: 我试过使用 into 进行转换但这也不起作用。

最佳答案

我怀疑您真正想要的是集合,而不是 map 。映射存储与特定键关联的值。集合存储一个唯一的值列表。

如果您的唯一用例是测试成员资格,那么您肯定需要一个集合。如果您还需要将一些数据与该键相关联,则需要一张 map 。

从任何序列生成一个集合非常容易。在你的情况下:

(set (flatten items))
;;=> #{"Pygmy Hedgehogs" "Dogs" "Cats" "Capybaras"}

flatten删除列表上的嵌套,为您提供一系列字符串。 set使用序列并返回该序列中的一组唯一值。

关于clojure - 将 clojure 持久向量转换为 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16064777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com