我有一个散列,其中键是整数,值是字符串数组。我需要按字母顺序对数组中的项进行排序,并将排序后的数组作为新的哈希值返回。
我觉得像hash.map{ |k,v| v.sort }
之类的东西会起作用,但是,没有。为了更明确一点,我需要转向:
hash = { 0 => ["c", "d", "b", "a"], 1 => ["e", "q", "x", "m"] }
成:
hash = { 0 => ["a", "b", "c", "d"], 1 => ["e", "m", "q", "x"] }
答案 0 :(得分:4)
这是一种方式:
hash.each_value { |v| v.sort! }
#=> {0=>["a", "b", "c", "d"], 1=>["e", "m", "q", "x"]}
或更简洁:
hash.each_value(&:sort!)
但是,如果您希望保留原始哈希,请执行以下操作:
hash.map { |k,v| [k,v.sort] }.to_h
#=> {0=>["a", "b", "c", "d"], 1=>["e", "m", "q", "x"]}
答案 1 :(得分:2)
试试这个,
hash.each { |k,v| v.sort! }
这会对数组进行就地排序。
答案 2 :(得分:0)
这不会改变原始哈希值。
hash.merge(hash) { |*,n| n.sort }
#=> {0=>["a", "b", "c", "d"], 1=>["e", "m", "q", "x"]}
如果要修改原始哈希,请将merge!
(又名update
)替换为merge
。
这使用Hash#merge和Hash#merge!的形式,它们使用一个块来确定合并的两个哈希中存在的键的值,这里是原始哈希的所有键。有关详细信息,请参阅文档。