排序字符串数组而不将它们转换为整数

时间:2017-03-08 04:29:57

标签: ruby string sorting

我有一个表示整数值的字符串数组:

array = ["0934", "123", "934", "0123"]

我想对数组进行排序,而不是将字符串转换为整数。 预期的输出是:

array = ["0123", "123", "0934", "934"]

请建议我如何做到这一点。

3 个答案:

答案 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"]

来吧,你需要从头开始写这个问题。不要指望很多人可以通过阅读这些内容来达到这种非平凡的要求。