2016-05-29 13 views
0

私は、配列の各要素を四角形にし、その二乗された数の新しい配列を返すメソッドを作成しようとしています。 each以外の方法は使用できません(例:mapまたはcollect)。私は新しい配列を設定しようとしました:アレイの各要素を操作し、それらの要素を収集または保存するにはどうすればよいですか?

def square_array(array) 
    array.each do |element| 
    new_array = element ** 2 
end 
end 

しかし、元の値を返します。助けて?

+1

それだけ 'each'を使用して、それを行うことは不可能です。なぜあなたは他のものを使うことができないのですか? – sawa

答えて

4

要素を新しい配列に配置して戻す必要があります。現在の要素の2乗で変数new_arrayを繰り返し作成するだけです。ここで

def square_array(array) 
    new_array = [] 
    array.each do |element| 
     new_array << element ** 2 
    end 
    new_array 
end 

# shorter 

def square_array(array) 
    new_array = [] 
    array.each { |e| new_array << e ** 2 } 
    new_array 
end 

# even shorter 

def square_array(array) 
    Array.new(array.size) { |i| array[i] ** 2} 
end 
+0

AH、それは多くの意味があります。ありがとうございました!!! –

+2

ここでの解決方法は、メソッド '<<'または 'new'(' ** 'の他に)を使います。 – sawa

+0

@sawa 'array'変数で呼び出されないので、値引きをすることができます。 - /第3版'#さらに短く 'は 'Array#size'メソッドを使いますが、文字通り質問をすると有効ではないかもしれません。 –

0

は、これを行うためのもう一つの方法です:

[].tap {|result| array.each {|i| result << i ** 2}} 
関連する問題