的n次出現我有以下的數組:紅寶石枚舉 - 找到最多匹配元件
arr = [1, 3, 2, 5, 2, 4, 2, 2, 4, 4, 2, 2, 4, 2, 1, 5]
欲包含第一三個奇元素的數組。
我知道我可以做到這一點:
arr.select(&:odd?).take(3)
,但我想避免在整個陣列的迭代,而是返回一旦我找到了第三場比賽。
我想出了以下解決方案,我相信做什麼,我想:
my_arr.each_with_object([]) do |el, memo|
memo << el if el.odd?; break memo if memo.size == 3
end
但就是有這樣做的更簡單的/慣用的方式?
我確認'force'有效,但是我找不到除[ruby lang]中的文檔外的文檔(http://docs.ruby-lang.org/ja/2.1.0/method/Enumerator=3a= 3aLazy/I/force.html)。你知道爲什麼它不在RDoc的文檔中嗎?是因爲它只是'to_a'的別名嗎? – sawa
僅供參考 - 您可以使用'arr.lazy.select(&:odd?)。first(3)'並避免'force' - 'take'是懶惰的,而first'不是。 – Myst
@sawa我也找不到它。如果你確實找到了,請隨時編輯我的答案。 –