On Aug 24, 1:44 pm, m... / tidbits.com (matt neuburg) wrote:
> William James <w_a_x_... / yahoo.com> wrote:
> > On Aug 23, 8:08 am, "Ronald Fischer" <ronald.fisc... / venyon.com>
> > wrote:
> > > > If this is a
> > > > problem, you can use this:
>
> > > > a.enum_for(:each_with_index).inject([]){|res, i|
> > > >   i[0].match( /g$/) ? res << i[1] : res
> > > > }
>
> > > This is an idea I like! Thanks a lot!
>
> > > Ronald
> > > --
> > > Ronald Fischer <ronald.fisc... / venyon.com>
> > > Phone: +49-89-452133-162
>
> > accum = []
> > a.each_with_index{|s,i| accum << i if s =~ /g$/ }
>
> And to generalize further, let's abstract the test (it shouldn't matter
> what the test is, just as it shouldn't matter what the array is):
>
> #specific part
> a=%w(Deutschlandsberg Stainz Preding Eibiswald)
> test = Proc.new {|s| s=~/g$/}

Why so prolix?

test = proc{|s| s =~ /g$/}

>
> #general part
> result = []
> a.each_with_index {|ss,ix| result << ix if test.call(ss)}
>
> Or, even more general (because the names stop mattering):
>
> def indices_matching_test(a)
>   result = []
>   a.each_with_index {|ss,ix| result << ix if yield ss}
>   result
> end
>
> #and here's how to use it:
> a=%w(Deutschlandsberg Stainz Preding Eibiswald)
> test = Proc.new {|s| s=~/g$/}
> puts indices_matching_test(a, &test)

Even better:
p indices_matching_test(a){|s| s =~ /g$/}