当前位置:  开发笔记 > 后端 > 正文

如何排序不是简单的哈希(散列哈希)

如何解决《如何排序不是简单的哈希(散列哈希)》经验,为你挑选了2个好方法。

我有这样的哈希

{ 55 => {:value=>61, :rating=>-147},
  89 => {:value=>72, :rating=>-175},
  78 => {:value=>64, :rating=>-155},
  84 => {:value=>90, :rating=>-220},
  95 => {:value=>39, :rating=>-92},
  46 => {:value=>97, :rating=>-237},
  52 => {:value=>73, :rating=>-177},
  64 => {:value=>69, :rating=>-167},
  86 => {:value=>68, :rating=>-165},
  53 => {:value=>20, :rating=>-45}
}

我怎样才能对它进行排序:评分?或者我应该使用一些不同的结构?



1> Milan Novota..:

我会将数据结构更改为哈希数组:

my_array =
[
  {:id => 78, :value=>64, :rating=>-155},
  {:id => 84, :value=>90, :rating=>-220},
  {:id => 95, :value=>39, :rating=>-92}
]

您可以轻松地对这种结构进行排序

my_array.sort_by { |record| record[:rating] }

要获得通过id获取记录的类似哈希的功能,您可以在my_array上定义一个新方法:

def my_array.find_by_id(id) 
  self.find { |hash| hash[:id] == id }
end

所以在那之后你就可以做到

my_array.find_by_id(id)

代替

my_hash[id]



2> Gareth..:

Ruby中的哈希值无法排序(至少不在1.9之前)

这意味着循环哈希不一定会以正确的顺序为您提供信息.但是,通过首先将其转换为数组,以特定顺序循环遍历Hashed数据是微不足道的,事实上,在Hash上调用sort方法会将其转换为数组:

>> { :a => 4, :b => 12, :c => 3, :d => 8 }.sort_by { |key, value| value }
=> [[:c, 3], [:a, 4], [:d, 8], [:b, 12]]

所以在你的情况下:

hsh.sort_by {|key, ratings| ratings[:rating] }

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有