Mappage des valeurs de deux tableaux dans Ruby

Je me demande s'il existe un moyen de faire ce que je peux faire ci-dessous avec Python, en Ruby :

sum = reduce(lambda x, y: x + y, map(lambda x, y: x * y, weights, data))

J'ai deux tableaux de tailles égales avec les poids et les données mais je n'arrive pas à trouver une fonction similaire à map dans Ruby, réduire j'ai du travail.

请先 登录 后评论

3 réponses

Curt Hagenlocher

La fonction Array.zip effectue une combinaison élément par élément de tableaux. Ce n'est pas aussi propre que la syntaxe Python, mais voici une approche que vous pouvez utiliser :

weights = [1, 2, 3]
data = [4, 5, 6]
result = Array.new
a.zip(b) { |x, y| result << x * y } # For just the one operation

sum = 0
a.zip(b) { |x, y| sum += x * y } # For both operations
请先 登录 后评论
Michiel de Mare

Dans Ruby 1.9 :

weights.zip(data).map{|a,b| a*b}.reduce(:+)

Dans Ruby 1.8 :

weights.zip(data).inject(0) {|sum,(w,d)| sum + w*d }
请先 登录 后评论
Kevin Ballard

@Michiel de Mare

Votre exemple Ruby 1.9 peut être raccourci un peu plus :

weights.zip(data).map(:*).reduce(:+)

Notez également que dans Ruby 1.8, si vous avez besoin d'ActiveSupport (de Rails), vous pouvez utiliser :

weights.zip(data).map(&:*).reduce(&:+)
请先 登录 后评论