2012-01-04 51 views
0

我開始學習ruby,並試圖找出一種方法,如果我有一個16位數字的數組,可以使用每種方法一次只打印4個數字。我可以很容易地做到這一點,但我缺乏Ruby中的每種方法的完全理解,所以這給我一些麻煩。在Ruby中使用每個

我有以下幾點:

x=[*1..16] 
index=0 
x.each do |element| 
    puts element[index] 
    index=index+3 
end 

現在很明顯,這是完全錯誤的,我知道,但我想放東西放在這裏。一點建議會很好。

謝謝

+0

你是什麼意思4在一個時間?每個都完全按照它的聲音來做......遍歷每個元素的數組。所以如果你想一次打印數組的4個元素,那麼使用它們是沒有意義的。 – c0deNinja 2012-01-04 20:53:43

+0

我明白each_slice會成爲這個問題的方法,但我正在練習一本我正在用於自學的書,練習題是使用每個練習,然後使用each_slice。我在使用每種方法時遇到問題。 – 2012-01-04 21:01:55

+0

似乎問題在於每個方法一次僅查看數組中的一個元素。所以,如果我想在一行上打印4個元素,然後跳到下一行並打印下一個4個元素,依此類推,這就成了一個問題......仍然不確定 – 2012-01-04 21:03:30

回答

6

一個可能的解決方案:

a = (1..16) 
a.each_slice(4) { |s| p s[3] } 

編輯:如果你想在同一行打印4個元素,然後跳到下一行並打印在接下來的4種元素等

a = (1..16) 
a.each_slice(4) { |s| puts s.join(' ') } 

或者使用各只

a = (1..16) 
a.each { |i| print i.to_s + ' '; print "\n" if i % 4 == 0 } 
+0

Enumerable是源碼所有的事情都很有趣,很好。 – tadman 2012-01-04 20:58:35

+1

這可以使用只有每個方法,而不是each_slice方法嗎? – 2012-01-04 20:58:45

+0

這個工作...巧妙的謝謝你 – 2012-01-04 21:18:59

2

嘗試each_slicehttp://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-each_slice

使用看起來像

(1..16).each_slice(4) do |x| 
    puts x.inspect 
end 
+0

但如何做到這一點只使用每種方法? – 2012-01-04 21:04:10

+0

據我所知,你所描述的只有'each'不可能,只知道當前元素,沒有別的。你也可以使用'each_with_index'並每4次迭代一次,但重要的是'each'與for循環有着根本的區別。 「每個」都會給你一個集合中的一個元素來一次處理,而沒有其他信息。 – undef 2012-01-04 21:12:40