Ruby 使用步进方法返回带有分隔符的大数字


(2500..75000).step(2500).to_a
 #=> [2500, 5000, 7500, 10000, 12500, 15000, 17500, 20000, 22500, 25000, 27500, 30000, 32500, 35000, 37500, 40000, 42500, 45000, 47500, 50000, 52500, 55000, 57500, 60000, 62500, 65000, 67500, 70000, 72500, 75000] 

如何使输出为:[ '2,500', '5,000', '7,500', '10,000', '12,500', ... ]

由于您使用的是 Rails,因此您可以使用 number_with_delimiter 助手:

(1..30).map { |i| number_with_delimiter(2500*i) }

在纯 Ruby 中

(1..30).map { |i| (2500*i).to_s.reverse.gsub(%r{([0-9]{3}(?=([0-9])))}, "\1,").reverse }

老实说,上面使用的正则表达式不是我创建的。而且它的可读性也不是很好。

这是我在纯Ruby中真正的功能解决方案(如果您不在Rails中,或者您不想使用辅助程序number_with_delimiter):

(1..30).map { |i| (2500*i).to_s.reverse.split("").reduce{|acc, n| "#{n}#{',' if acc.delete(',').length%3==0}#{acc}" } }

将其提取到方法中

def number_with_delimiter(number, delimiter = ',')
  number.to_s.reverse.split("").reduce do |acc, n| 
    if acc.delete(delimiter).length % 3 == 0  
      "#{n}#{delimiter}#{acc}"
    else
      "#{n}#{acc}"
    end
  end
end

适用于任何数字,例如:

> (1..15).map { |i| number_with_delimiter(75000*i) }
 => ["75,000", "150,000", "225,000", "300,000", "375,000", "450,000", "525,000",
     "600,000", "675,000", "750,000", "825,000", "900,000", "975,000", 
     "1,050,000", "1,125,000"]

简单的方法是:

('2,500'..'75,000').step(2500).to_a

相关内容

最新更新