Ruby更改散列键的顺序

u5rb5r59  于 2022-12-12  发布在  Ruby
关注(0)|答案(4)|浏览(124)

我有一个哈希,我希望更改密钥顺序。

{"result"=>{"data"=>[{"Quantity"=>13, "Rate"=>17.1},
                    {"Quantity"=>29,"Rate"=>3.2}, 
                    {"Quantity"=>7, "Rate"=>3.4}]}}

收件人:

{"result"=>{"data"=>[{"Rate"=>17.1, "Quantity"=>13}, 
                    {"Rate"=>3.2, "Quantity"=>29}, 
                    {"Rate"=>3.4, "Quantity"=>7}]}}

可以通过hash["result"]["data"]访问。我试过了;

hash["result"]["data"][0].each_value{|v| v.replace({"Rate" => v.delete("Rate")}.merge(v))}

但它给出了错误:
NoMethodError(未定义Python 17.1的'delete'方法:浮点型):

qni6mghb

qni6mghb1#

试试这个

hash["result"]["data"].each{|v| v.replace({"Rate" => v.delete("Rate")}.merge(v))}
mzmfm0qo

mzmfm0qo2#

我认为他们不需要做这么多的操作。我假设data包含了你的整个哈希,那么只需一个Map和哈希的反向就可以解决你的问题。

data['result']['data'] = data['result']['data'].map{|v|  Hash[v.to_a.reverse]}
ca1c2owp

ca1c2owp3#

还有四种方法...
反转这些哈希项的顺序:

hash['result']['data'].map! { |h| h.to_a.reverse.to_h }

将“Quantity”移至末尾:

hash['result']['data'].each { |h| h["Quantity"] = h.delete("Quantity") }

将第一个项目移到结尾:

hash['result']['data'].map! { |h| h.merge([h.shift].to_h) }

强制一定给定的命令:

keys = ["Rate", "Quantity"]
hash['result']['data'].map! { |h| keys.zip(h.values_at(*keys)).to_h }
kt06eoxx

kt06eoxx4#

hash = {a: 1, b: 2, c: 3}
hash.slice!(:b, :a)
puts hash # { :b => 2, :a => 1 }

相关问题