25

次のコードを実行します。

> a = [1,2,3].collect
 => #<Enumerator: [1, 2, 3]:collect> 
> b = a.next
 => 1 
> a.each do |x| puts x end
1
2
3
=> [nil, nil, nil] 

の最初の要素を既に読んでいるので、 の結果は であると予想doされます。エレガントな結果を得るにはどうすればよいですか?2, 3a2, 3

編集:

明確にするために、最初のエントリをスキップしたくありません。別の方法で処理したいだけです。だから私は両方bとループが欲しい。

4

5 に答える 5

60

これはどう?

[1,2,3].drop(1).each {|x| puts x }
# >> 2
# >> 3

イテレータを歩き続ける方法は次のとおりです

a = [1,2,3]

b = a.each # => #<Enumerator: [1, 2, 3]:each>
b.next # skip first one

loop do
  c = b.next
  puts c
end
# >> 2
# >> 3
于 2013-06-05T10:33:02.807 に答える
6

あなたができる

a.drop(1).each do |x| puts x end

編集:

mapメソッドを使用する

b = [1,2,3].drop(1).map{|x| x}
=> b will be [2, 3]
于 2013-06-05T10:33:31.720 に答える
3

これを試して:

a.shift    
a.each do |x| puts x end
于 2013-06-05T10:31:38.723 に答える
0

次のコードを試してください

a=[1,2,3]
a.drop(1)
于 2013-06-05T10:34:56.523 に答える