2

Rubyにはselect、配列を受け取り、ブロックで指定されたテストに合格したすべての要素で構成されるサブ配列を返すメソッドがあります。

myarray.select{|e| mytest(e)}   #=> subarray of elements passing mytest

これらの要素ではなく、それらのインデックスを取得する簡単な方法があるかどうか疑問に思っています。私はあなたがこれを行うことができることを理解しています:

indices = []
myarray.each_with_index{|e,i| indices << i if mytest(e)}

しかし、私はワンライナーを探しています。存在しますか?Arrayクラスに拡張機能を記述しないでください。そうすれば、ワンライナーを取得できます。

4

3 に答える 3

6

別のワンライナー:

(0...myarray.length).select {|i| mytest(myarray[i])}

乾杯!

于 2012-06-21T18:32:57.887 に答える
4

これがあなたのためのワンライナーです。長さが3の要素のインデックスを選択します。

a = ['foo', 'bar', 't']
a.map.with_index{|el, i| i if el.length == 3}.compact # => [0, 1]

または別のもの(@ fl00rによって提案された):

a.reduce([]){|ar,el| ar << a.index(el) if el.size == 3; ar}
于 2012-06-21T18:30:55.253 に答える
0

また、

myarray.select{|e| mytest(e)}.map!{|e| myarray.index(e)}

ただし、要素が繰り返されている場合、これは正しく機能しません。

于 2012-06-21T18:58:26.330 に答える