是否有解构键值对的方法?我有一个函数,它将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