如何按值从高到低排序哈希数组?附Ruby示例结构
解决Ruby哈希数组按值降序排序的问题
嘿,这个需求其实很容易实现,咱们先拆解下你的数据结构:images_found["results"]是一个数组,里面每个元素都是只包含单个键值对的小哈希。要按这些哈希的值从高到低排序,用Ruby的sort_by方法就能轻松搞定,这里有两种常用的写法:
方法一:用负号直接实现降序
这种写法不需要额外反转数组,直接通过取数值的负数来让sort_by按降序排列,逻辑更紧凑:
sorted_results = images_found["results"].sort_by do |single_hash| # 提取每个小哈希里的唯一值,取负后排序就等同于原数值降序 -single_hash.values.first end
方法二:先升序排序再反转
如果觉得负号的写法不够直观,也可以先按升序排列数组,再反转得到降序结果,可读性更强:
sorted_results = images_found["results"].sort_by { |h| h.values.first }.reverse
为什么这么写?
- 每个数组元素(比如
{"img_1"=>1.923076923076923})只有一个键值对,所以single_hash.values.first能精准拿到我们要排序的数值。 sort_by默认会按提取出的数值升序排列,要么用负号反转排序逻辑,要么直接调用reverse把升序数组转成降序。
验证一下的话,排序后的结果里img_1(值1.923...)会排在最前面,接着是img_2(0.824...),然后是值相同的img_4和img_11(0.549...),完全符合从高到低的要求~
内容的提问来源于stack exchange,提问作者Puneet Pandey
相关产品推荐
相关产品推荐

