配列内のすべての要素から減算するルビ関数はありますか?
[2,4,7,8,9] - 8 = [-6,-4,-1,0,1]
これは機能しませんが、より複雑なケースではこれを実行したくありません。
[2,4,7,8,9] - [8,8,8,8,8] = [-6,-4,-1,0,1]
配列内のすべての要素から減算するルビ関数はありますか?
[2,4,7,8,9] - 8 = [-6,-4,-1,0,1]
これは機能しませんが、より複雑なケースではこれを実行したくありません。
[2,4,7,8,9] - [8,8,8,8,8] = [-6,-4,-1,0,1]
が必要ですmap
。これにより、Enumerable の各要素に変換を適用し、結果の配列を返すことができます。
[2,4,7,8,9].map { |i| i - 8 } # => [-6, -4, -1, 0, 1]
余談ですが、2番目の例は、このようには機能しません。
[2,4,7,8,9] - [8,8,8,8,8] = [-6,-4,-1,0,1]
減算は、最初の配列から 2 番目の配列の項目を削除[2,4,7,9]
します[-6,-4,-1,0,1]
。
次の方法で、マップまたは収集メソッドのいずれかを使用できます。
[2,4,7,8,9].collect {|e| e-8}
=> [-6, -4, -1, 0, 1]
[2,4,7,8,9].map {|e| e-8}
=> [-6, -4, -1, 0, 1]
JRuby を使用している場合は、NArray と同様の機能を持つ MDArray を試すことができます。ただし、あまりドキュメントはありません。
2 番目のケースでは、外部反復子を使用できます。これを試して:
ary = [8,8,8,8,8].each
[2,4,7,8,9].map{ |e| e - ary.next } # => [-6,-4,-1,0,1]