簡體   English   中英

遍歷地圖,“更改”每個值並返回地圖的慣用方式?

[英]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函數,該函數接受兩個函數fg並將它們分別應用於鍵和值。

暫無
暫無

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

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