ruby – 按值排序哈希散列(并返回散列,而不是数组)
发布时间:2020-12-16 19:24:39 所属栏目:百科 来源:网络整理
导读:我有以下哈希: user = { 'user' = { 'title' = {'weight' = 1,.... } 'body' = {'weight' = 4,....} .... .... }} 是否可以让用户按其孩子哈希值的权重键排序? 我看着Hash.sort,但它看起来像是返回数组,而不是我原来的哈希排序. 解决方法 在Ruby 1.9中,Has
我有以下哈希:
user = { 'user' => { 'title' => {'weight' => 1,.... } 'body' => {'weight' => 4,....} .... .... } } 是否可以让用户按其孩子哈希值的权重键排序? 我看着Hash.sort,但它看起来像是返回数组,而不是我原来的哈希排序. 解决方法
在Ruby 1.9中,Hash是排序的,但是Hash#sort仍然返回一个数组.想象一下!这意味着您可以在其上构建自己的排序方法.
class Hash def sorted_hash(&block) self.class[sort(&block)] # Hash[ [[key1,value1],[key2,value2]] ] end end Ruby 1.8中没有哈希值.如果您希望使用Ruby 1.8兼容性,则可以使用ActiveSupport的 class ActiveSupport::OrderedHash def sorted_hash(&block) self.class[sort(&block)] end end hash = ActiveSupport::OrderedHash.new hash["b"] = "b" hash["a"] = "a" hash #=> {"b"=>"b","a"=>"a"} => unsorted hash.sorted_hash #=> {"a"=>"a","b"=>"b"} => sorted! 您必须将sorted_hash方法复制到您的代码,因为默认情况下不存在! 深层次排序更新 hash = ActiveSupport::OrderedHash.new hash["a"] = { "attr" => "2","..." => "..." } hash["b"] = { "attr" => "1","..." => "..." } # Unsorted. hash #=> {"a"=>{"attr"=>"2","..."=>"..."},"b"=>{"attr"=>"1","..."=>"..."}} # Sort on the "attr" key. (Assuming every value is a Hash itself!) hash.sorted_hash { |a,b| a[1]["attr"] <=> b[1]["attr"] } #=> {"b"=>{"attr"=>"1","a"=>{"attr"=>"2","..."=>"..."}} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |