gpt4 book ai didi

clojure - 查找 map 是否包含多个键

转载 作者:行者123 更新时间:2023-12-03 15:20:04 25 4
gpt4 key购买 nike

我是 Clojure 的新手,我想知道是否有办法测试 map 是否有多个键。我注意到 contains?只检查一把 key

我正在尝试做的事情:

(def mario 
{:position {:x 1 :y 2}
:velocity {:x 2 :y 0}
:mass 20})

;;Test if mario has a position and a velocity
(contains-many? mario :position :velocity) ;;true

;;Test if mario has a mass and a jump-height
(contains-many? mario :mass :jump-height) ;;false

基本上,是否有类似 contains-many? 的函数在 clojure 库中,如果不是,您将如何实现 contains-many?功能?

最佳答案

我不知道有任何功能可以做到这一点。还需要定义您希望 map 包含每个键还是仅包含一些键。我选择了every case,如果你想要某个版本,只需替换every?some? .

我的直接未优化版本是:

(defn contains-many? [m & ks]
(every? #(contains? m %) ks))

已经过测试:

(deftest a-test
(testing "Basic test cases"
(let [m {:a 1 :b 1 :c 2}]
(is (contains-many? m :a))
(is (contains-many? m :a :b))
(is (contains-many? m :a :b :c))
(is (not (contains-many? m :a :d)))
(is (not (contains-many? m :a :b :d))))))

编辑:使用噪音史密斯的建议进行简化

关于clojure - 查找 map 是否包含多个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27914026/

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