我给出了一张如下所示的地图:
{:foo 121 :yo 85 :good 85 :nice 53 :better 35 :cheaper 26 :price 26 }
我想对地图的价值做一些数学但不改变地图的顺序。 例如,如果我的总计数为400,那么我希望新地图看起来像:
{:foo 121/400 :yo 85/400 :good 85/400 :nice 53/400 :better 35/400 :cheaper 26/400 :price 26/400 }
我可以用reduce来做,但它正在改变地图的顺序。我想我必须使用ref和alter来做这个,但是我正在研究的任何解决方案都失败了。
如何解决这个问题?
答案 0 :(得分:1)
您需要使用保持插入顺序的地图,例如ordered。
理论上你也可以使用数组映射,但它们会自动提升到哈希映射,如果要操作它们,这将是一个令人头痛的问题。
答案 1 :(得分:1)
当以多态方式在clojure地图上操作时,不能保证元素的顺序将被保留。因此,如果您的收藏不是太大,您可能会使用array-map。但是,在一定数量的插入后,array-map变为hash-map(如果没有更改,则此数字为10)
您也可能喜欢此有序地图实施https://github.com/flatland/ordered