2013-03-27 65 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,這將使您回到熟悉的領域並顯示最後一列的值。