2016-07-25 161 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