2011-04-10 7 views
6

Je fais ceci:Ruby- Ajout/soustraction éléments d'un tableau avec un autre tableau

a = [1,2,3,4] 
b = [2,3,4,5] 
c = b - a 
put c 

Je reçois cette réponse ->[1]
Je veux que cette réponse ->[1,1,1,1] (comme l'addition de la matrice/soustraction)

J'ai essayé ceci:

c.each {|e| c[e] = b[e] - a[e]} 

mais je reçois cette réponse: [1,0,0,0]

Quelqu'un peut-il me donner une bonne façon de faire cela? Merci beaucoup!

Répondre

16

Vous pouvez utiliser zip:

a.zip(b).map { |x, y| y - x } 
# => [1, 1, 1, 1] 

Il y a aussi une classe Matrix:

require "matrix" 

a = Matrix[[1, 2, 3, 4]] 
b = Matrix[[2, 3, 4, 5]] 
c = b - a 
# => Matrix[[1, 1, 1, 1]] 
+0

Merci beaucoup. J'ai tout converti en une matrice. Encore une question. Qu'est-ce que j'utiliserais pour automatiser la construction puis remplir une matrice? J'ai utilisé array1 = Array.new (hi) {| e | e = 0} pour construire et remplir un tableau défini par l'utilisateur avec 0. Y a-t-il une commande similaire pour les matrices? Merci encore! – subyman

+0

@subyman 'array1 = Array.new (hi, 0)' serait plus simple. – sawa

+0

@subyman 'Matrix.build' pourrait être ce que vous cherchez. Consultez le document [doc for mor info] (http://www.ruby-doc.org/stdlib/libdoc/matrix/rdoc/classes/Matrix.html#M001112). Il existe cependant un certain nombre de méthodes. – Andy

2

Vous pouvez utiliser each_with_index et map.

c = b.each_with_index.map { |n,i| n - a[i] } 
# => [1, 1, 1, 1] 
+0

Cela fonctionne également dans Ruby 1.8. –

+0

Merci, je n'arrête pas d'oublier ce qui a été ajouté en 1.9. – Andy

Questions connexes