如何在数组的数组中获得特定的值



我有一个数组(外部数组),它包含三个数组(内部数组),每个数组有三个元素。

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]} " } 

,但我得到相同的结果。任何建议都非常感谢。我需要一个简单的解释

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"]

数组。map遍历数组的元素,因此在每一步中|el|都是一个元素,而不是索引,如:第一次迭代['a', 'b', 'c'],第二次迭代['d', 'e', 'f'],以此类推…

我只是指出这一点,因为我不知道你想要做的目标是什么

这样做:

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

因为你想让字母在索引2处,而不是3处

数组也应该这样定义:

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

你可以这样使用map:

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

或者如果您真的想要看跌而不是收集的值:

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

你也可以使用Ruby的Matrix类,如果有更多的矩阵的东西,你想做:

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

现在可以在last_column上使用任何Vector方法,包括to_a,这将使您回到熟悉的上一列值的领域。

ruby中的数组从0开始索引,而不是从1开始索引。所以:

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

应该给你你想要的。

你也可以试试下面的方法:

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

相关内容

  • 没有找到相关文章

最新更新