0
a=[11,22,31,224,44].to_enum
=> #<Enumerator: [11, 22, 31, 224, 44]:each>
a.select.with_index{|x| puts x if x<2 }
=> []
a.with_index(2)
=> #<Enumerator: #<Enumerator: [11, 22, 31, 224, 44]:each>:with_index(2)>
irb(main):011:0> a.with_index(2){|x| puts x if x==224}
224
=> [11, 22, 31, 224, 44]
a.with_index(2){|x| puts x if x < 224}
11
22
31
44
=> [11, 22, 31, 224, 44]

混乱: ここでは、開始オフセットをとして設定しました。2しかし、出力を調べると、の11 代わりにどのように31なりますか。のように31位置にあり2thます。

a.with_index(2){|x| puts x if x > 224}
=> [11, 22, 31, 224, 44]
a.with_index(1){|x| puts x if x > 224}
=> [11, 22, 31, 224, 44]
a.with_index(1){|x| puts x if x < 224}
11
22
31
44
=> [11, 22, 31, 224, 44]
a.with_index(1){|x| puts x if x < 224}
11
22
31
44
=> [11, 22, 31, 224, 44]

混乱: ここでは、開始オフセットをとして設定しました。しかし、出力1を調べると、の11代わりにどのようになりますか22。のように22位置にあり1stます。

すべての事実を一緒に検討する際に、開始オフセットについて言及したとしても知りたいのですがenum#with_index、言及されたオフセットから評価を開始してみませんか?

注:indexコンテンツと一緒に印刷する直接的な方法はあります

4

1 に答える 1

4

Enumerator#with_indexには紛らわしいドキュメントがありますが、これでわかりやすくなることを願っています。

a=[11,22,31,224,44].to_enum
=> [11, 22, 31, 224, 44]
a.with_index { |val,index| puts "index: #{index} for #{val}" }
index: 0 for 11
index: 1 for 22
index: 2 for 31
index: 3 for 224
index: 4 for 44

a.with_index(2) { |val,index| puts "index: #{index} for #{val}" }
index: 2 for 11
index: 3 for 22
index: 4 for 31
index: 5 for 224
index: 6 for 44

ご覧のとおり、実際に行われるのはインデックスをオフセットすることであり、指定されたインデックスからの反復を開始することではありません。

于 2013-02-02T21:34:34.260 に答える