Ruby on rails Ruby使用step方法返回带分隔符的大数字?

Ruby on rails Ruby使用step方法返回带分隔符的大数字?,ruby-on-rails,ruby,Ruby On Rails,Ruby,如何将输出设置为:['2500','5000','7500','10000','12500',…]简单的方法是: (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, 575

如何将输出设置为:
['2500','5000','7500','10000','12500',…]

简单的方法是:

(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] 
简单的方法是:

(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] 

由于您使用的是Rails,因此可以使用帮助器:


由于您使用的是Rails,因此可以使用帮助器:

纯红宝石

(1..30).map { |i| number_with_delimiter(2500*i) }
老实说,上面使用的正则表达式不是我创建的。而且它也不是很可读

这是我在纯Ruby中真正的功能解决方案(如果您不在Rails中,或者您不想使用带有分隔符的helper number_):

将其提取到方法中

(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..30).map { |i| number_with_delimiter(2500*i) }
老实说,上面使用的正则表达式不是我创建的。而且它也不是很可读

这是我在纯Ruby中真正的功能解决方案(如果您不在Rails中,或者您不想使用带有分隔符的helper number_):

将其提取到方法中

(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

逗号是默认的分隔符,因此您可以删除
:delimiter
选项。此外,如果数字有意义,则如果您排除了2500,则会丢失文档值。我可能会保留原始数字和
步骤
@MarkThomas是的,我想问题是您希望更明显的是什么:数组的长度(如上所述的30)还是使用步骤的最小/最大值。从上下文之外的问题很难判断,所以我只使用前者。@Matt我用_分隔符方法找到了数字_,但由于某种原因,我无法让它工作。依赖关系是什么?我试图在irb中要求'rails'(true),但是
(1..30)。映射{I | number_with_delimiter(2500*I)}
返回
#=>未定义的方法编号_with_delimiter'(main:Object
@feed_me_code),运行
包含ActionView::Helpers::numberhalper
,然后运行上述代码。如果您是在
视图中运行此操作
,则它应该可以正常工作。逗号是默认的分隔符,因此您可以删除
:delimiter
选项。此外,如果数字有意义,则如果您将2500排除在外,则会丢失文档值。我可能会保留原始数字和
步骤
@MarkThomas是的,我想问题是您希望更明显的是什么:数组的长度(如上所述的30)还是使用步骤的最小/最大值。从上下文之外的问题很难判断,所以我只使用前者。@Matt我用_分隔符方法找到了数字_,但由于某种原因,我无法让它工作。依赖关系是什么?我试图在irb中要求'rails'(true),但是
(1..30)。映射{I | number_with_delimiter(2500*I)}
返回
#=>未定义的方法编号_with_delimiter'(main:Object
@feed_me_code),运行
包含ActionView::Helpers::numberhalper
,然后运行上述代码。如果您是在
视图中运行此操作,那么它应该可以正常工作。仅供参考,这不会推广到带有额外逗号的数字。例如
('999000'..'1001000')。步骤(1000)。由于
succ
如何与
步骤
协同工作,因此to_a=[]
-逗号并不智能。(顺便说一句,我没有投反对票)@Matt是的,我意识到,但对于我的用例,它工作得很好。我只是动态构建一个下拉选择菜单。否决票是没有理由的(不管是谁做的)。我否决了这个。这个答案不是这个问题的通用解决方案,问题中也没有说明你的简化假设,即它适用于“你的用例”。仅供参考,这不会推广到带有额外逗号的数字。例如
('999000'..'1001000')。步骤(1000)。由于
succ
如何与
步骤
协同工作,因此to_a=[]
-逗号并不智能。(顺便说一句,我没有投反对票)@Matt是的,我意识到,但对于我的用例,它工作得很好。我只是动态构建一个下拉选择菜单。否决票是没有理由的(不管是谁做的)。我否决了这个。这个答案不是这个问题的通用解决方案,并且您简化的假设它适用于“您的用例”,在问题中没有具体说明。