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
的位置。混亂與枚舉#with_index - 起始偏移指數
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
也?
我也應該起來投票:)因爲我的發現是正確的,只是不能證明自己,但在我的幫助下,我現在做了。 – DoLoveSky
這是一個紅寶石的bug嗎?否則原始數組元素如何改變其位置? – DoLoveSky
數組元素保持相同的順序,他們只是得到一個不同的索引值(但仍然基於提供的偏移量單調)。在您的原始示例中注意,由於您沒有使用索引,因此如果您將#with_index替換爲#each,則所有代碼的行爲都相同 –