我有一个看起来像这样的哈希
{"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
答案 0 :(得分:2)
您需要进入正则表达式以获取每个表达式的第一个数字的值 范围。
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]
答案 1 :(得分:1)
您将数据描述为哈希。对于序列,您需要一对数组。这样的事情会做到:
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&lt; 1.9。