2016-07-25 118 views
-2

我需要将整数分成一个数组。将整数分成一个数组

例如,

的整数变量a等于48

a = 48 

我需要基于对10

计数我需要得到如下的阵列48分割成一个阵列,

arr = [ 10, 20, 30, 40, 48] 

编辑: -

我试过下面的代码,它工作正常。

max = 48 
arr = [] 
j = 0 
for i in 1..max 
    if i % 10 == 0 
    arr[j] = i 
    j = j + 1 
    end 
end 

if max % 10 != 0 
    arr[j] = max 
end 

p arr 
# => [10, 20, 30, 40, 48] 

但是,如果我有一个bignum整数,它将需要更多的时间。是否有任何内置方法像这样就像字符串分割一样。

我知道拆分方法,我也知道如何将字符串拆分为基于字符串中可用字符的数组。但我不知道如何使用split方法将整数分割为基于count的数组。

任何人请解释我该怎么做?

在此先感谢!

+3

我投票结束(和降低投票)这个问题,因为它不清楚什么是想要的,因为问题发布后发生了变化。 –

+0

@CarySwoveland我需要删除这个问题,并发布新问题。我怎样才能删除这个问题? – suresh

+0

如果有多个答案(当您尝试删除时存在多个答案),或者存在一个upvoted答案(您尝试删除时没有任何答案,但现在有一个答案),则无法删除。见[this](http://meta.stackexchange.com/questions/5221/how-does-deleting-work-what-c​​an-cause-a-post-to-be-deleted-and-what-does-that/5222#5222)获取更多信息。 –

回答

2

a = 48开始,然后尝试:

(10..a).step(10).to_a.push(a) #=> [10, 20, 30, 40, 48] 

使用Range#step增加范围的步骤十个在转换为数组之前,最后追加a的值。或者,你也可以这样写:

10.step(a,10).to_a << a #=> [10, 20, 30, 40, 48] 
+1

与所有其他答案进行比较,它会以最短的时间为bignum执行。 – suresh

+1

谢谢你的回答。 – suresh

1

你可以试试这个

a = 48 
array = [] 

(1..a/10).each{|x| array.push(x*10)} 
a%10 != 0 ? array.push(a) : array 

#=> [10, 20, 30, 40, 48] 
+0

我更新了我的问题。我曾尝试过像循环这样的概念。但是如果我有一个bignum整数类的值,那么就像这个循环需要太多的时间。是否有任何内置方法或其他方法来缩短分割时间? – suresh

+0

你需要的是一个非常特别的操作。很难想象许多人会需要这样的东西,这就是为什么没有Ruby核心方法来做到这一点。 –

0

我建议这个解决方案随意改变,因为IM一些代码错误,不熟悉的红宝石:

$a = 48 
$num = 10 
array = Array.new 

while $num < $a do 
    array << $num 
    $num +=10 
end 
array << $a 
+0

你的代码正在工作,就像PHP一样,但是在ruby中,我们不使用'global'变量这种方式。 –

+0

是的,这是一个错误,我说我不熟悉红宝石从未尝试过。谢谢你的澄清。 –

0

您可以在此情况下,使用maplambda

a = 48 
arr = ((1..a/10).map(&->(x){x*10}) << a).uniq 

p arr 
# => [10, 20, 30, 40, 48] 

有效范围内的所有(1..a/10)元素(在此情况下1..4),地图方法调用lambda函数。这个lambda具有一个参数并返回x*10(对于第一个元素1*10 # => 10)并将所有结果添加到数组中。

我希望这会有所帮助。

+1

你能解释它是如何工作的吗? – suresh