a = [3, 4, 7, 8, 3]
b = [5, 3, 6, 8, 3]
同じ長さの配列を想定するとeach
、両方の配列の各要素から結果を取得するために使用する方法またはその他の慣用的な方法はありますか? カウンターを使わずに?
たとえば、各要素の積を取得するには:[15, 12, 42, 64, 9]
(0..a.count - 1).each do |i|
とても醜いです...
ルビー1.9.3
a = [3, 4, 7, 8, 3]
b = [5, 3, 6, 8, 3]
同じ長さの配列を想定するとeach
、両方の配列の各要素から結果を取得するために使用する方法またはその他の慣用的な方法はありますか? カウンターを使わずに?
たとえば、各要素の積を取得するには:[15, 12, 42, 64, 9]
(0..a.count - 1).each do |i|
とても醜いです...
ルビー1.9.3
使用についてはどうですかArray.zip
:
>> a = [3,4,7,8,3]
=> [3, 4, 7, 8, 3]
>> b = [5,3,6,8,3]
=> [5, 3, 6, 8, 3]
>> c = []
=> []
>> a.zip(b) do |i, j| c << i * j end
=> [[3, 5], [4, 3], [7, 6], [8, 8], [3, 3]]
>> c
=> [15, 12, 42, 64, 9]
注:私はRubyプログラマーではないので、踏みにじったイディオムについてお詫びします。
パフォーマンス上の理由から、zip
より良いかもしれませんがtranspose
、対称性を保ち、理解しやすくなっています。
[a, b].transpose.map{|a, b| a * b}
# => [15, 12, 42, 64, 9]
zip
との違いはtranspose
、配列の長さが同じでない場合、前者nil
はデフォルトとして挿入され、後者はエラーが発生することです。状況に応じて、どちらか一方を優先する場合があります。