2013-03-27 57 views
4

我有一个数组(数组外),其中包含三个数组(数组内),其中每个数组有三个元素。如何获得数组中的特定值

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

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

回答

5

做这样的:

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

既然你想在指数2个字母,而不是3

而且数组应该这样定义:在红宝石

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

我实际上是想把2不是3,这是我的错误...我的工作实际代码有52个阵列在主阵列(它的一副牌,所以索引0-51)。我急于尝试简化这篇文章。 – kingweaver88 2013-03-27 20:08:30

+0

没问题,但你有解决方案吗? – 2013-03-27 20:11:20

0

数组是从0开始索引,而不是从1开始。因此:

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

应该给你你想要的。

+0

再次,这是我的错误,我的实际代码索引0-51,所以我只是有点草率写出我的问题。你写什么是我最初认为会起作用的,我的意思是说它是有道理的,但由于某种原因它不起作用。 – kingweaver88 2013-03-27 20:14:15

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 
+0

啊这是我正在寻找的东西,我不知道为什么,但我没有想到嵌​​套循环。尽管如此,你有一个嵌套数组,所以为什么不嵌套循环......好东西。虽然我也喜欢其他建议,因为在某些时候我需要修改数组而不是仅仅打印它。但是这回答了我最初的问题。谢谢!! – kingweaver88 2013-03-27 20:11:48

6

each_index是可枚举,其经过的所有指标,并对每一个动作。完成后,它将返回您的原始集合,因为它不是它的工作来改变它。如果你想通过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']等等......

只是指出这一点,因为我不知道你是什么目标试图去做。

+0

使用'each_index'的+1不是任何情况下的惯用方式。 – tokland 2013-03-27 11:08:15

2

你可以使用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类,如果有更多的矩阵定y你想要做的事情:

​​

你现在可以使用last_column上的Vector方法中的任何一种,包括to_a,这将使您回到熟悉的领域并显示最后一列的值。