2017-08-23 93 views
-2

我正在試圖循環訪問一個數組,並將每個其他項添加到新數組中。循環訪問數組並將每個偶數項添加到新數組中

def yes_no(arr) 
    i = 0 
    new_array = [] 
    while i != arr.size 
    arr.select.each_with_index {|value , index| index.even?} 
    new_array << value 
    i += 1 
    end 
    new_array 
end 

該代碼應該返回一個新的數組,其值按順序排列。爲:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

它應該返回:

[1, 3, 5, 7, 9, 2, 6, 10, 8, 4] 

初始陣列的第一值總是取。我相信我的代碼有正確的邏輯,但我需要一些幫助來完成這個問題。

下面是另一個例子:

arr = ['this', 'code', 'is', 'right', 'the'] 
// returns ['this', 'is', 'the', 'right', 'code'] 
+3

預期結果是什麼?再次檢查它,現在它很不清楚。 – Ilya

+2

你爲什麼叫這個'yes_no'? –

+2

我認爲目前尚不清楚如何獲得預期的結果。 _「將每個其他項目添加到一個新數組」_聽起來好像結果應該簡單地爲'[1,3,5,7,9]'。這並不是很明顯,爲什麼後面跟着「2,6,10,8,4」(按此順序)。 – Stefan

回答

4

我不知道如何解決你的代碼,但在這裏是另一種方式來獲得期望的結果:

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

new_array = [] 

until arr.empty? 
    new_array << arr.shift 
    arr.rotate! 
end 

new_array 
#=> [1, 3, 5, 7, 9, 2, 6, 10, 8, 4] 

注意arr被修改,你可能想要dup吧。

+1

非常聰明。我想你可以省略'rotate!'的參數。 –

+0

@ sagarpandya82哦,你是對的,我不知道'rotate'有一個默認值。 – Stefan