我有这个简单的数组,我想从较低的数字到更高的数字订购:
"80", "84", "115", "98", "128", "131", "132", "128", "139", "140", "141", "142", "142", "124", "144", "145", "148", "149", "152", "97"
要对它进行排序,我使用sort
,但输出不是我期望的输出。
这是我的代码:
def try_order
unordered = ["80", "84", "115", "98", "128", "131",
"132", "128", "139", "140", "141", "142",
"142", "124", "144", "145", "148", "149", "152", "97"]
p "Unordered list is #{unordered}."
ordered = unordered.sort
p "Ordered list is #{ordered}."
end
try_order
输出如下:
"Unordered list is 80841159812813113212813914014114214212414414514814915297."
"Ordered list is 11512412812813113213914014114214214414514814915280849798."
正如您所看到的,有序列表不是以较低的数字开头,即80,而是将3位数字首先从1开始。
我有什么遗失的吗?
答案 0 :(得分:7)
这是因为你要排序字符串,而不是数字。转换为整数进行排序。
unordered.map(&:to_i).sort.map(&:to_s)
如果将原始数组保留为数字,那么就可以消除问题(并获得更好的排序性能(因为现在您不必将数组映射两次)。)
答案 1 :(得分:6)
所有你需要的是:
unordered.sort_by(&:to_i)