Ruby的Array#sort
默认会按数值大小升序排列数组中的数字:
[11, 12, 13, 112, 113, 124, 125, 127]
我想对数字数组进行排序,就像按字母顺序排列单词一样。
[11, 112, 113, 12, 124, 125, 127, 13]
我该怎么做?(最终,我想用哈希键来做到这一点,所以如果你愿意用这种方式回答,那也可以。)还有,这种排序类型有名称吗?
你们都疯了))) 我有一个解决方案:
a.sort_by &:to_s
有一种方法是将所有的值转换为字符串,然后再转换回来。
a = [11, 12, 13, 112, 113, 124, 125, 127]
a = a.map(&:to_s).sort.map(&:to_i)
p a # => [11, 112, 113, 12, 124, 125, 127, 13]
你可以传递一个代码块来进行排序,该代码块接受两个参数并返回自定义比较函数的结果。示例应该很清楚,但如果您有任何问题,请随时提问。
a = [11, 112, 113, 12, 124, 125, 127, 13]
new_a = a.sort do |x,y|
"%{x}" <=> "%{y}"
end
puts new_a
Integer
可能是值得的,从语义上讲更加令人愉悦。虽然它显然会使实例化变得更困难,但至少对我来说感觉更正确。!
)。进行10,000次测试,我的代码执行时间为2.7秒,你的为2.8秒。请查看分析器输出。 - Stevenrequire 'profile'
即可。这真的让我回想起了 PHP 时代到处复制粘贴 microtime()
的日子。 - Stevenrequire 'profile'
。又是一种新工具加入我的工具箱了。我觉得我从这个问题中学到的比我做出的贡献还多 xD。 - Matchu
sort_by!
д»…йҖӮз”ЁдәҺ1.9.2+пјҲеңЁ1.9.1дёӯдёҚеӯҳеңЁпјүгҖӮ - Phrogz