簡體   English   中英

clojure:使用多個鍵在 map 中搜索

[英]clojure: search in a map with multiple keys

我有一個名為 myData 的 map。 它有 2 個鍵::user_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"}]}

我試過:(get-in mydata [:user-id 1:name "abc"])和(get-in mydata [1 "abc"])。 它們都不起作用。 檢索數據的正確方法是什么?

另一個答案是正確的。

我也許會重新考慮你是如何設置的。 在許多情況下,將整個 map 作為密鑰會使您的生活更加艱難,因為您需要訪問整個 map 才能進行查找。 如果您手頭有整張地圖,那么在這里您的情況可能沒問題。

我可能會“規范化”您存儲數據的方式,以便更輕松地查找並減少冗余:

(def m {1 {"abc" "/", 
           "cde" "/account"}
        2 {"bcd" "/foo"}})

(get-in m [1 "cde"])  ; "/account"
(get-in m [2 "bcd"])  ; "/foo"

現在您沒有重復的數據,也不需要一次訪問所有數據來進行查找。

您有一個 map 的鍵是看起來像{:user-id 1, :name "abc"}的映射,因此為了獲取與這些鍵關聯的值,您應該將看起來像這樣的 map 傳遞給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"})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM