这里有一个hash的例子:
h1 = { a1: :a2, b1: :b2, c1: :c2, d1: :d2, e1: :e2, f1: :f2 }
有这样一组键:
a1 = [:b1, :d1, :f1]
如何根据数组对该哈希的键进行排序?不在数组中的散列键必须按照它们的顺序排在排序键之后。结果:
{ b1: :b2, d1: :d2, f1: :f2, a1: :a2, c1: :c2, e1: :e2 }
m4pnthwp1#
我会这样做:
h1.slice(*a1).merge(h1.except(*a1)) #=> {:b1=>:b2, :d1=>:d2, :f1=>:f2, :a1=>:a2, :c1=>:c2, :e1=>:e2}
Hash#slice按照a1中定义的顺序返回h1中的元素。而Hash#except返回丢失的。Hash#merge将两个组合并为一个散列。
Hash#slice
a1
h1
Hash#except
Hash#merge
qacovj5a2#
你可以写信
h1.slice(*a1, *(h1.keys - a1))
或
h1.slice(*a1, *h1.keys)
两个都返回
{:b1=>:b2, :d1=>:d2, :f1=>:f2, :a1=>:a2, :c1=>:c2, :e1=>:e2}
请参见Hash#slice。
2条答案
按热度按时间m4pnthwp1#
我会这样做:
Hash#slice
按照a1
中定义的顺序返回h1
中的元素。而Hash#except
返回丢失的。Hash#merge
将两个组合并为一个散列。qacovj5a2#
你可以写信
或
两个都返回
请参见Hash#slice。