繁体   English   中英

订购Rails中的哈希

[英]Order an hash in rails

我有一个看起来像这样的哈希

{"1-5 lbs"=>107342.43999999999, "31+ lbs"=>39838.58000000001, "21-30 lbs"=>19036.41, "11-20 lbs"=>39350.95, "6-10 lbs"=>41401.880000000005}

我想对它进行排序,使其看起来像这样

{"1-5 lbs"=>107342.43999999999, "6-10 lbs"=>41401.880000000005, "11-20 lbs"=>39350.95, "21-30 lbs"=>19036.41, "31+ lbs"=>39838.58000000001 }

逻辑存储在实例变量@weight_ranges

您需要进入正则表达式以获取每个范围的第一个数字的值。

Hash[(@weight_ranges.sort_by {|key, value| key.scan(/\d+/)[0].to_i})]

进一步分解:

# Sort the weight ranges by the first series of digits found in the key
x = @weight_ranges.sort_by {|key, value| key.scan(/\d+/)[0].to_i}
# Convert each inner Array to a key, value pair in a Hash
x = Hash[x]

您将数据描述为哈希。 对于序列,您需要成对的数组。 这样的事情会做到这一点:

list_of_pairs = @weight_ranges.keys.sort_by(&:to_i).map {|k| [k, @weight_ranges[k]]}

这利用了一个巧合的巧合,即to_i在它看到的第一个非数字停止。

更正

我刚刚了解到,在1.9中有Ruby哈希排序! 因此很容易适应:

Hash[@weight_ranges.sort_by{|k,v| k.to_i}] 

我将把这两个想法留在这里,因为第一个仍然适用于Ruby <1.9。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM