2


1

多次元配列があります。

foo = [["" a "、" b "、" c "]、[" d "、" e "、" f "]、[" g "、" h "、" i "]]

今、私は "f"の "座標"を返す必要があります。それは(1,2)であるべきです。 どの "row" "f"にあるのかわからずにこれを行うにはどうすればよいでしょうか。 私はインデックス方法を使用しようとしてきました、しかし、これは私がそれにどこを見るべきかをそれに言うとき、うまくいく、すなわち。

foo [1] .index( "f")#=> 2

私は何かを試した

foo [0..2] [0..2] .index( "f")

しかしそれはただnilを返します。

これは可能ですか?

5 Answer


4


必要なものが見つかったら、配列のインデックスをループ処理して現在のパスを返します。 これがメソッドの例です:

def find2d(array、elem)array.each_with_index do | row、row_idx | def(); row.each_with_index do | col、col_idx | col == elem end end endの場合、[row_idx、col_idx]を返します。


3


foo.each_with_index do |アイテム、インデックス| if item.index( 'f')// 'f'が格納されている配列番号 "Array number:#{index}" //その配列内の文字 'f'のインデックスはitem.index( 'f ')終了終了


1


あなたはおそらく文字を見つけるために配列をループして、そしてその場所をプリントアウトする必要があるでしょう。

これは実際のルビではなく、より一般的なコードスニペットです。 しかし、概念はそこにあります。 よりよい方法があるかどうかわからない。

for(int i = 0; i <3; i){for(int x = 0; i <3; x){if(foo [i] [x] == 'f'){print x、i; }}}


1


娯楽のためだけのもう一つの方法:

y = nil x =(0 ... foo.size).find {| xi | y = foo [xi] .index( "f")}

"y = nil"の部分はループの前に "y"を定義しているだけなので後で読むことができます…​


0


あなたが使用することができます

foo.flatten

平坦化された配列を取得してからindexを使用する