From: Siep Korteling Date: 2008-04-30T05:31:39+09:00 Subject: Re: Getting array index for non-zero elements Rob Biedenharn wrote: > On Apr 29, 2008, at 3:46 PM, Victor Reyes wrote: > >> [5,0,0,4,0,6,0,3,0], >> # Output: 0 0 0 0 1 9 0 4 0 >> puts >> nonzeroIndex >> # >> Output: *nil* >> >> Any help will be greatly appreciated, as usual! >> >> Thank you >> >> Victor > > > > irb> require 'code/ruby/ext/enumerable.rb' > => true > irb> @ga[0] > => [0, 0, 0, 0, 1, 9, 0, 4, 0] > irb> @ga[0].map_with_index {|e,i| e.zero? ? nil : i} > => [nil, nil, nil, nil, 4, 5, nil, 7, nil] > irb> @ga[0].map_with_index {|e,i| e.zero? ? nil : i}.compact > => [4, 5, 7] > > Then you just need Enumerable#map_with_index > > module Enumerable > # Like each_with_index, but the value is the array of block results. > def map_with_index > a = [] > each_with_index { |e,i| a << yield(e, i) } > a > end > end > > -Rob > > Rob Biedenharn http://agileconsultingllc.com > Rob@AgileConsultingLLC.com It works without the 'require' here.(VERSION=1.8.6). I like the map_with_index method (new for me), but isn't it overkill here? @ga.each do |sub_arr| sub_arr.each_with_index do |value,index| print index.to_s + " " unless value == 0 end puts end Regards, Siep -- Posted via http://www.ruby-forum.com/.