4

3 つの配列 (配列の内側) を含む配列 (配列の外側) があり、それぞれに 3 つの要素があります。

array = [[a, b, c], [d, e, f], [g, h, i]]

外側の配列のインデックスを使用して特定の内側の配列を選択し、そのインデックスに基づいて選択した内側の配列内の値を選択します。これが私が試したものです:

array.each_index{|i| puts "letter: #{array[i[3]]} " } 

私はそれが私に次の出力を与えることを望んでいました

letter: c letter: f letter: i

しかし、代わりに、私は得る

letter: [[a, b, c], [d, e, f], [g, h, i]]

私も試しました

array.each_index{|i| puts "letter: #{array[i][3]} " } 

しかし、私は同じ結果を得ます。どんな提案でも大歓迎です。簡単な説明が必要です。

4

5 に答える 5

8

each_indexすべてのインデックスを通過し、それぞれに対してアクションを実行する Enumerable です。完了すると、元のコレクションが返されます。これは、コレクションを変更する仕事ではないためです。puts/を介して画面に出力したい場合はprint問題ありませんeach_index

元のコレクションのすべての要素を調べた結果として新しいコレクションを作成する場合は、mapを使用する必要があります。

例えば

array = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]
new_array = array.map {|el| el[2]}
=> ["c", "f", "i"]

array.map は配列の要素を繰り返し処理するため、すべてのステップで |el| 次のように、要素であり、インデックスではありません:['a', 'b', 'c']最初の反復、['d', 'e', 'f']2 番目の反復など...

あなたがやろうとしていることの目標が何かわからないので、これを指摘するだけです。

于 2013-03-27T10:36:19.207 に答える
5

次のようにします。

array.each_index{|i| puts "letter: #{array[i][2]} " } 

3 ではなくインデックス 2 に文字が必要なので。

また、配列は次のように定義する必要があります。

array = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]
于 2013-03-27T10:22:40.783 に答える
3

map次のように使用できます。

a = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]
a.map(&:last)
# => ["c", "f", "i"]

または、収集された値ではなくプットが本当に必要な場合:

a.each {|v| puts "letter: #{v.last}"}

Matrixやりたいことが他にもある場合は、Ruby のクラスを使用することもできます。

require 'matrix'
m = Matrix[['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]
last_column = m.column_vectors.last
# => Vector["c", "f", "i"]

を含むの任意のVectorメソッドを使用できるようになりました。これにより、最後の列の値を使い慣れた領域に戻ることができます。last_columnto_a

于 2013-03-27T12:47:10.167 に答える
0

ruby の配列は、1 からではなく 0 からインデックス付けされます。

array.each_index{|i| puts "letter: #{array[i][2]} " }

あなたが望むものをあなたに与えるべきです。

于 2013-03-27T10:22:57.970 に答える
0

以下も試すことができます:

p RUBY_VERSION

arr = [[1,2,3],[4,5,6],[11,12,13]]

arr.each{|x| p x; x.each_index{|i| p "Digit :: #{x[i]}" if i == 2} }

出力:

"2.0.0"
[1, 2, 3]
"Digit :: 3"
[4, 5, 6]
"Digit :: 6"
[11, 12, 13]
"Digit :: 13
于 2013-03-27T10:30:41.390 に答える