![](/img/trans.png)
[英]Is there an idiomatic way to find matching key and value in map in Clojure?
[英]Idiomatic way to iterate over a map, 'changing' each value and returning a map?
(def m {:a 1 :b 2 :c 3})
假設我希望增加m
每個值。 我能想到的唯一方法是
(into {}
(map
(fn [[key val]]
[key (inc val)])
m))
有一個更好的方法嗎? 我需要在代碼中做很多事情,而且看起來有些怪異。 我確實確實需要在這里使用映射(主要用於O(1)查找,鍵將是UUID,值將是映射),而不是向量或列表。
在這里找到了看起來不錯的東西: http : //clojuredocs.org/clojure.core/reduce-kv 。
(defn update-map [m f]
(reduce-kv (fn [m k v]
(assoc m k (f v))) {} m))
那你可以做
(update-map {:a 1 :b 2} inc)
要得到
{:a 2 :b 3}
如果需要,可以向f
提供k
或制作一個update-key-values
函數,該函數接受兩個函數f
和g
並將它們分別應用於鍵和值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.