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是的,我意识到,但对于我的用例,它工作得很好。我只是动态构建一个下拉选择菜单。否决票是没有理由的(不管是谁做的)。我否决了这个。这个答案不是这个问题的通用解决方案,并且您简化的假设它适用于“您的用例”,在问题中没有具体说明。