是否有解構鍵值對的方法?我有一個函數,它將map作爲參數,我想提取params本身的key和value的值。我怎麼做 ?如何將地圖解構爲鍵和值
我可以做與載體以下 -
((FN [[AB]](STR AB))[AB])
如何做相同/相似地圖 -
((FN [{KV}](STR KV)){KV})
謝謝, 穆爾塔扎
是否有解構鍵值對的方法?我有一個函數,它將map作爲參數,我想提取params本身的key和value的值。我怎麼做 ?如何將地圖解構爲鍵和值
我可以做與載體以下 -
((FN [[AB]](STR AB))[AB])
如何做相同/相似地圖 -
((FN [{KV}](STR KV)){KV})
謝謝, 穆爾塔扎
函數圖拆解精氨酸名單是專爲從地圖中提取一定的鑰匙,並讓他們像這樣的名字:
core> (defn foo [{my-a :a my-b :b}] {my-a my-b})
core/foo
core> (foo {:a 1 :b 2})
{1 2}
我建議this tutorial。要直接等價於((fn[{k v}] (str k v)) {k v})
有點難,因爲地圖可能有許多鍵和許多值,所以解構代碼將無法分辨出您在哪裏尋找哪個鍵和值。按鍵解構更容易推理。
如果你想隨意選擇在地圖中的第一項,你可以提取並使用列表解構形式單一地圖項:
core> (defn foo [[k v]] {v k})
#'core/foo
core> (foo (first {1 2}))
{2 1}
在這個例子中,列表解構形式[k v]
被使用,因爲首先將第一個映射條目作爲向量返回。
將地圖值自動分配給與鍵名相對應的符號也是習慣和方便的。這是這樣寫的:'(defn foo [{:keys [a b]}](str a b))''。然後在函數調用:'(foo {:a 1:b 2})'。這將返回'「12」'。 –
第二個示例在處理地圖中的所有鍵/值對時非常有用,因爲地圖的seq視圖是鍵/值對的列表。例如。 (map(fn [[kv]](println kv))my-map) – Alex
user=> (for [x (hash-map :a 1 :b 2 :c 3)] (str (first x) " " (second x)))
(":a 1" ":c 3" ":b 2")
有可供解構的地圖快捷鍵。例如,如果您正在查找特定的密鑰,則不必輸入name1:key1 name1:key2 ...
例如,
main=> (defn fbb [{:keys [foo bar baz]}] (+ foo bar baz))
#'main/fbb
main=> (fbb {:foo 2 :bar 3 :baz 4})
9
的,而不是...
(defn fbb [{foo :foo bar :bar baz :baz}] (+ foo bar baz))
如果地圖鍵是字符串,可以說:strs
而不是:keys
,如果他們是符號,您可以使用:syms
。
我不知道安庫爾在說什麼,但試試這個http://stackoverflow.com/questions/12505603/how-to-destructure-a-map-as-key-and-value/12505893#12505893 – runexec