2017-08-23 6 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が変更されていることを

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] 

が注あなたはdupにしたいかもしれません。

+1

非常に賢い。私は 'rotate! 'の引数を省略することができると思います。 –

+0

@ sagarpandya82あなたは正しいです、私は '回転'がデフォルト値を持っていることに気づいていませんでした。 – Stefan

関連する問題