Ruby在字符串中按整数排序数组

时间:2016-08-02 18:47:36

标签: arrays ruby sorting

我有一个文件,我在数据中读取并放入数组中,因此我可以对它们进行排序:

input.txt中

#75 - Hamilton Ave.
#12A - Long Road
#12B - Long Road
#120 - Curvy Road

我的红宝石:

result = []
file = open("input.txt").each do | line |
  result << line
end
puts result.sort_by {|x| x.to_i}.reverse

我想按字符串中的整数值排序。但是订单的出现是:

#12A - Long Road
#12B - Long Road
#120 - Curvy Road
#75 - Hamilton Ave.

而不是:

#12A - Long Road
#12B - Long Road    
#75 - Hamilton Ave.
#120 - Curvy Road

在排序时,我应该使用某种正则表达式来评估字符串吗?

1 个答案:

答案 0 :(得分:4)

使用像/\d+/这样的正则表达式从字符串中提取数字,并使用to_i将其转换为整数,例如:

input.each_line.sort_by {|line| line[/\d+/].to_i }

要在12A之前保留12B,请从块中返回一个数组,例如[ line[/\d+/].to_i, line ]。这样,如果两行具有相同的整数,它将按字母顺序排列这两行。这假定在有问题的数字之前只有#,并且每行至少有一个数字。

input = <<END
#75 - Hamilton Ave.
#12A - Long Road
#12B - Long Road
#120 - Curvy Road
END

result = input.each_line.sort_by do |line|
  [ line[/\d+/].to_i, line ]
end

p result
# => [ "#12A - Long Road\n",
#      "#12B - Long Road\n",
#      "#75 - Hamilton Ave.\n",
#      "#120 - Curvy Road\n" ]

如果你想摆脱map(&:chomp) s,请在\n内投掷。{/ p>