2017-01-05 1 views
0

Disons que j'ai tableaux à deux dimensionsComment résumer les tableaux à deux dimensions

array= [[10,12,15,17],[16,32,65,47],[45,48,41,23],[36,25,74,98], [32,19,66,88],...] 

Je voudrais faire en rubis

arr = [[10+45+32+..,12+48+19,15+41+66+..,17+23+88+..], [16+36+..,32+25+..,65+74+..,47+98+..] 

Merci à l'avance.

+0

double possible de [trouver la somme des tableaux 2D en Ruby] (http://stackoverflow.com/questions/3013968/find-the-sum-of-2d-arrays-in-ruby) – jadhachem

Répondre

1

Utilisez partition pour séparer et collecter les sous-matrices à index pairs et les sous-matrices à index impair. Transposez ensuite chaque partition, suivie de la somme de chaque sous-groupe nouvellement formé.

array = [[10,12,15,17],[16,32,65,47],[45,48,41,23],[36,25,74,98],[32,19,66,88]] 

array.partition.with_index { |_,i| i.even? } 
       .map { |e| e.transpose.map(&:sum) } 
#=> [[87, 79, 122, 128], [52, 57, 139, 145]] 

méthodes clés:Enumerable#partition, Integer#even? et Array#transpose. Voir ruby-docs pour plus d'informations. Si vous utilisez les versions Ruby < 2.4.0, utilisez inject(:+) au lieu de sum, comme suit:

array.partition.with_index { |_,i| i.even? } 
       .map { |e| e.transpose.map { |e| e.inject(:+) } } 
#=> [[87, 79, 122, 128], [52, 57, 139, 145]] 
+0

méthode non définie 'sum' pour [10, 45]: Array – user7373737

+0

@ user7373737 'sum' fonctionne dans Ruby 2.4.0. J'ai mis à jour ma réponse, utilisez ceci si vous n'avez pas installé Ruby 2.4.0. –

+0

Merci beaucoup cela fonctionne bien – user7373737