Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
clojure:使用多个键在地图中搜索_Clojure - Fatal编程技术网

clojure:使用多个键在地图中搜索

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

我有一张叫做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 "/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"
现在您没有重复的数据,也不需要一次访问所有数据来进行查找