Module: Enumerable
- Defined in:
- lib/xenum.rb
Instance Method Summary collapse
- #lazy_flatten(level = nil) ⇒ Object
- #lazy_insert(index, *objs) ⇒ Object
- #lazy_product(*enums) ⇒ Object
- #merge_sort(*enums) ⇒ Object
Instance Method Details
#lazy_flatten(level = nil) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/xenum.rb', line 10 def lazy_flatten(level = nil) these = self level = -1 if level.nil? Enumerator.new do |yielder| level.nil? these.each do |this| if Enumerable === this && level != 0 this.lazy_flatten(level - 1).each do |sub| yielder.yield(sub) end next end yielder.yield(this) end end end |
#lazy_insert(index, *objs) ⇒ Object
29 30 31 32 33 34 35 36 37 |
# File 'lib/xenum.rb', line 29 def lazy_insert(index, *objs) return self if objs.empty? if index >= 0 lazy_insert_pos(index, objs) else lazy_insert_neg(index, objs) end end |
#lazy_product(*enums) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/xenum.rb', line 39 def lazy_product(*enums) if enums.empty? return Enumerator.new do |yielder| each do |this| yielder.yield([this]) end end end Enumerator.new do |yielder| each do |this| head = [this] enums[0].lazy_product(*enums[1..-1]).each do |tail| yielder.yield(head + tail) end end end end |
#merge_sort(*enums) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/xenum.rb', line 58 def merge_sort(*enums) case enums.size when 0 self when 1 _merge_sort(enums[0]) else enums2 = enums.pop((enums.size / 2) - 1) enum2 = enums.pop e2 = enum2.merge_sort(*enums2) e1 = merge_sort(*enums) e1.merge_sort(e2) end end |