【发布时间】:2016-05-24 05:53:41
【问题描述】:
我有一个哈希:
sample = { bar: 200, foo: 100, baz: 100 }
如何使用sort_order 中的键顺序对sample 进行排序:
sort_order = [:foo, :bar, :baz, :qux, :quux]
预期结果:
sample #=> { foo: 100, bar: 200, baz: 100 }
我能想到的只有
new_hash = {}
sort_order.each{|k| new_hash[k] = sample[k] unless sample[k].nil? }
sample = new_hash
一定有更好的方法。提示?
不应该存在没有值的键,即键的数量保持不变,Sort Hash Keys based on order of same keys in array 不是这种情况
【问题讨论】:
-
你想要什么更好的方式?更短?性能更好?
-
1.更短 2. 性能更好 按此顺序
-
@Amit 这与我的解决方案有何不同?
-
sample.sort_by { |k,_| sort_order.index(k) }.to_h或sort_order.each_with_object({}) { |sym,h| h[sym] = sample[sym] if sample.key?(sym) }。 -
sample中是否存在sort_order中不存在的键?