2017-01-05 13 views
0

lassen sagen, dass ich zweidimensionale ArraysWie Summe des zweidimensionale Anordnung

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

Ich mag würde dies

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

Vielen Dank im Voraus.

+0

Mögliche Duplikat [Finden der Summe von 2D-Arrays in Ruby] (http://stackoverflow.com/questions/3013968/finding-the-sum-of-2d-arrays-in-ruby) – jadhachem

Antwort

1

Verwenden Sie partition, um die geradzahlig indizierten Teilarrays und ungeradzahligen Teilarrays zu trennen und zu sammeln. Transponiere dann jede Partition, gefolgt von der Summe jedes neu gebildeten Sub-Arrays.

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]] 

Schlüsselmethoden:Enumerable#partition, Integer#even? und Array#transpose. Weitere Informationen finden Sie unter ruby-docs. Wenn Sie mit Ruby Versionen < 2.4.0 verwenden inject(:+) statt sum wie folgt:

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

undefined Methode 'sum' für [10, 45]: Array – user7373737

+0

@ user7373737 'sum' funktioniert in Ruby 2.4.0. Ich habe meine Antwort aktualisiert, benutze diese, wenn du Ruby 2.4.0 nicht installiert hast. –

+0

Vielen Dank es funktioniert gut – user7373737

Verwandte Themen