[英]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.