【问题标题】:Clojure - Map two hash-maps based on key valueClojure - 根据键值映射两个哈希映射
【发布时间】:2013-08-23 14:22:27
【问题描述】:

我有两组类似的地图

[{:id 101 :price 40.00} {:id 102 :price 50.00} {:id 103 :price 30.00}]

[{:id 101 :price 45.00} {:id 102 :price 50.00} {:id 103 :price 20.00}]

我正在尝试根据“id”键将第一个序列中的每个地图与第二个序列中的对应地图进行匹配,以便确定新价格。

获取新价格的逻辑似乎很简单,但我似乎无法让两张地图对齐。我认为 map 函数是我需要的,但是在 REPL 中花了一些时间之后,我无法产生想要的结果。

有人可以指出我正确的方向吗?

【问题讨论】:

    标签: map clojure


    【解决方案1】:
    (def data1 [{:id 101 :price 40.00} {:id 102 :price 50.00} {:id 103 :price 30.00}])
    (def data2 [{:id 101 :price 45.00} {:id 102 :price 50.00} {:id 103 :price 20.00}])
    
    (require '[clojure.set :as set])
    
    (set/join data1 (map #(set/rename-keys % {:price :new-price}) data2))
    
    ;=> #{{:new-price 45.0, :price 40.0, :id 101}
    ;     {:new-price 20.0, :price 30.0, :id 103}
    ;     {:new-price 50.0, :price 50.0, :id 102}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多