clojure:使用多个键在地图中搜索
我有一张叫做myData的地图。它有两个键::user\u id和:name。我想按2个键搜索它clojure:使用多个键在地图中搜索,clojure,Clojure,我有一张叫做myData的地图。它有两个键::user\u id和:name。我想按2个键搜索它 {{:user-id 1, :name "abc"} [{:user-id 1, :name "abc", :uri "/"}], {:user-id 2, :name "bcd"} [{:user-id 2, :name "bcd", :uri "/foo"}], {:user-id 1, :name "cde"} [{:user-id 1, :name "cde", :uri "/accou
{{:user-id 1, :name "abc"} [{:user-id 1, :name "abc", :uri "/"}],
{:user-id 2, :name "bcd"} [{:user-id 2, :name "bcd", :uri "/foo"}],
{:user-id 1, :name "cde"} [{:user-id 1, :name "cde", :uri "/account"}]}
我尝试过:(获取mydata[:用户id 1:name“abc”])和(获取mydata[1“abc”])。它们都不起作用。检索数据的正确方法是什么?您有一个带有键的映射,这些键是类似于
{:user id 1,:name“abc”}
的映射,因此为了获得与这些键相关联的值,您应该将类似的映射传递到get
(get
{{:user-id 1, :name "abc"} [{:user-id 1, :name "abc", :uri "/"}],
{:user-id 2, :name "bcd"} [{:user-id 2, :name "bcd", :uri "/foo"}],
{:user-id 1, :name "cde"} [{:user-id 1, :name "cde", :uri "/account"}]}
{:user-id 1 :name "abc"})
另一个答案是正确的 不过我可能会重新考虑一下你是怎么安排的。在很多情况下,拥有一张完整的地图会让你的生活更加艰难,因为你需要访问整个地图才能进行查找。如果你手头有所有的地图,那么你在这里的情况可能会很好 我可能会“规范化”存储数据的方式,以便于查找和减少冗余:
(def m {1 {"abc" "/",
"cde" "/account"}
2 {"bcd" "/foo"}})
(get-in m [1 "cde"]) ; "/account"
(get-in m [2 "bcd"]) ; "/foo"
现在您没有重复的数据,也不需要一次访问所有数据来进行查找