Arrays 取一个数字,将其拆分为一维数组中的索引组
我有一个像12345678这样的数字,我正试图将它拆分成一个3组的数组。如果我有:Arrays 取一个数字,将其拆分为一维数组中的索引组,arrays,ruby,Arrays,Ruby,我有一个像12345678这样的数字,我正试图将它拆分成一个3组的数组。如果我有: stack = 12345678 然后我可以得到以下数组: overflow = [12,345,678] 我在考虑使用Enumberable#每个_切片,就像这里提出的另一个类似问题一样,但这会创建一个二维数组。因此,我考虑使用数组#展平,但这并不能使我的数字正确分组 有没有什么好方法可以做到这一点,或者这将是一个讨厌的嵌套循环?谢谢 这可能效率不高,但确实有效。您可以在此基础上进行构建/优化 stack
stack = 12345678
然后我可以得到以下数组:
overflow = [12,345,678]
我在考虑使用Enumberable#每个_切片
,就像这里提出的另一个类似问题一样,但这会创建一个二维数组。因此,我考虑使用数组#展平
,但这并不能使我的数字正确分组
有没有什么好方法可以做到这一点,或者这将是一个讨厌的嵌套循环?谢谢 这可能效率不高,但确实有效。您可以在此基础上进行构建/优化
stack.to_s.chars.reverse.each_slice(3).map {|s| s.reverse.join.to_i }.reverse
# => [12, 345, 678]
这可能效率不高,但确实有效。您可以在此基础上进行构建/优化
stack.to_s.chars.reverse.each_slice(3).map {|s| s.reverse.join.to_i }.reverse
# => [12, 345, 678]
对于纯Ruby方式(非Rails):
如果您希望它出现在rails中,那么有一个非常好的方法
number_with_delimiter(12345678)
# => 12,345,678
对于纯Ruby方式(非Rails):
如果您希望它出现在rails中,那么有一个非常好的方法
number_with_delimiter(12345678)
# => 12,345,678
另一种选择:
def break_in_3s(num)
return [0] if num.zero?
a = []
until num.zero?
num, last = num.divmod(1000)
a.unshift(last)
end
a
end
break_in_3s(12_345_678)
#=> [12, 345, 678]
break_in_3s(2_345_678)
#=> [2, 345, 678]
break_in_3s(312_345_678)
#=> [312, 345, 678]
我假设num
是非负的
旁白:为什么我们没有:
class Array; alias >> unshift; end
所以我们可以写:
a >> last
?另一个选项:
def break_in_3s(num)
return [0] if num.zero?
a = []
until num.zero?
num, last = num.divmod(1000)
a.unshift(last)
end
a
end
break_in_3s(12_345_678)
#=> [12, 345, 678]
break_in_3s(2_345_678)
#=> [2, 345, 678]
break_in_3s(312_345_678)
#=> [312, 345, 678]
我假设num
是非负的
旁白:为什么我们没有:
class Array; alias >> unshift; end
所以我们可以写:
a >> last
?如果您在Rails上,您可以使用带分隔符(12345678)的
number\u#=>12345678
不在Rails上,只需使用纯Ruby即可。不过,如果你在Rails上,你可以使用带分隔符(12345678)的number\u=>12345678
不在Rails上,只需使用纯Ruby即可。不过是Thx。