排序范围值

8
我想对由数字范围表示的字符串数组进行排序,例如以下内容:
b = ["0-5", "100-250", "5-25", "50-100", "250-500", "25-50"]

使用 sort 方法,我得到:

b.sort 
# => ["0-5", "100-250", "25-50", "250-500", "5-25", "50-100"]

我希望你能这样做:

我希望你按照这种方式进行:

["0-5, "5-25", "25-50", "50-100", "100-250", "250-500"]

2
你尝试过将这些字符串转换为实际范围并进行排序吗? - Severin
3个回答

15

尝试:

b.sort_by { |r| r.split('-').map(&:to_i) }
# => ["0-5", "5-25", "25-50", "50-100", "100-250", "250-500"] 

这个解决方案将每个项 ("0-5") 拆分成两个项 (["0", "5"]),并将它们转换为整数 ([0, 5])。现在按照数组排序 (首先按第一个项排序,第二个项作为打破平局的标准)。


5
b.sort_by { |a| a.split('-').first.to_i }

=> ["0-5", "5-25", "25-50", "50-100", "100-250", "250-500"]

5
b.sort_by(&:to_i)
  #=> ["0-5", "5-25", "25-50", "50-100", "100-250", "250-500"]

因为
"25-50".to_i #=> 25

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接