我有一个表示整数值的字符串数组:
array = ["0934", "123", "934", "0123"]
我想对数组进行排序,而不是将字符串转换为整数。 预期的输出是:
array = ["0123", "123", "0934", "934"]
请建议我如何做到这一点。
答案 0 :(得分:4)
如果您无法将字符串转换为Array#sort_by!块内的整数,则可以使用零填充字符串(使用String#rjust),这样它们的长度都相同,然后对那些填充的字符串进行排序。
n = array.map(&:size).max
#=> 4
array.sort_by! { |s| s.rjust(n, '0') }
#=> ["123", "0123", "0934", "934"]
请注意
array.map { |s| s.rjust(n, '0') }
#=> ["0934", "0123", "0934", "0123"]
答案 1 :(得分:1)
我认为这会解决问题
array.sort_by!(&:to_i)
答案 2 :(得分:1)
这很容易:
array.sort
# => ["0123", "0934", "123", "934"]
顺便说一下,你的预期答案是错误的。
修改强>
好的,我想我终于得到了你的意图。也就是说,您希望数组按照通过读取元素作为浮点数产生的值进行排序,然后按其长度的降序排序。
array.sort_by{|e| [e.to_f, -e.length]}
# => ["0123", "123", "0934", "934"]
来吧,你需要从头开始写这个问题。不要指望很多人可以通过阅读这些内容来达到这种非平凡的要求。