Module: Enumerable
- Defined in:
- lib/mug/top.rb,
lib/mug/bool.rb,
lib/mug/counts.rb,
lib/mug/any-and-all.rb
Instance Method Summary collapse
-
#any_and_all?(&block) ⇒ Boolean
Passes each element of the collection to the given block.
-
#bottom(n = 1, &blk) ⇒ Object
Get the bottom
n
items, ordered from bottom to top. -
#bottom_by(n = 1, &blk) ⇒ Object
Get the bottom
n
items, in order from bottom to top, ordered by mapping the values through the given block. -
#counts(&block) ⇒ Object
Returns a hash of item=>count showing how many of each
item
are in this Enumerable. -
#counts_by(&block) ⇒ Object
Passes each element in turn to the block, and returns a hash of result=>count.
-
#to_b ⇒ Object
Converts enum to a boolean.
-
#top(n = 1, &blk) ⇒ Object
Get the top
n
items, in order from top to bottom. -
#top_by(n = 1, &blk) ⇒ Object
Get the top
n
items, in order from top to bottom, ordered by mapping the values through the given block.
Instance Method Details
#any_and_all?(&block) ⇒ Boolean
Passes each element of the collection to the given block. The method returns ‘true` if the block contains elements that never return `false` or `nil`. If the block is not given, Ruby adds an implicit block of `{ |obj| obj }` which will cause `and_and_all?` to return `true` when none of the collection members are `false` or `nil`.
10 11 12 13 14 15 16 17 18 19 |
# File 'lib/mug/any-and-all.rb', line 10 def any_and_all? &block block ||= proc {|obj| obj } result = false each do |x| return false unless block[x] result = true end result end |
#bottom(n = 1, &blk) ⇒ Object
Get the bottom n
items, ordered from bottom to top.
Returns an Array
even when n
is 1.
58 59 60 61 62 63 64 65 |
# File 'lib/mug/top.rb', line 58 def bottom n=1, &blk if block_given? sort(&blk)[0...n] else #bottom_by(n) {|x| x } sort[0...n] end end |
#bottom_by(n = 1, &blk) ⇒ Object
Get the bottom n
items, in order from bottom to top, ordered by mapping the values through the given block.
Returns an Array
even when n
is 1. Values that are tied after mapping are returned in the initial order.
If no block is given, an enumerator is returned instead.
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/mug/top.rb', line 78 def bottom_by n=1, &blk return enum_for(:bottom_by, n) unless block_given? chain = {} each do |x| y = yield x chain[y] ||= [] chain[y] << x end ary = [] chain.keys.sort.each do |k| ary += chain[k] break if ary.length > n end ary[0...n] end |
#counts(&block) ⇒ Object
Returns a hash of item=>count showing how many of each item
are in this Enumerable.
8 9 10 11 12 13 14 15 |
# File 'lib/mug/counts.rb', line 8 def counts &block return counts_by(&block) if block_given? hsh = Hash.new{|h,k| h[k] = 0 } each do |k| hsh[k] += 1 end hsh end |
#counts_by(&block) ⇒ Object
Passes each element in turn to the block, and returns a hash of result=>count.
If no block is given, an enumerator is returned.
23 24 25 26 27 28 29 30 31 |
# File 'lib/mug/counts.rb', line 23 def counts_by &block return enum_for(:counts_by) unless block_given? hsh = Hash.new{|h,k| h[k] = 0 } each do |j| k = yield j hsh[k] += 1 end hsh end |
#to_b ⇒ Object
Converts enum to a boolean. Returns true if there are any elements.
86 87 88 |
# File 'lib/mug/bool.rb', line 86 def to_b any?{ true } end |
#top(n = 1, &blk) ⇒ Object
Get the top n
items, in order from top to bottom.
Returns an Array
even when n
is 1.
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/mug/top.rb', line 11 def top n=1, &blk if block_given? sort{|x,y| yield y, x }[0...n] else #top_by(n) {|x| x } if n <= length sort[-n..-1].reverse else sort.reverse end end end |
#top_by(n = 1, &blk) ⇒ Object
Get the top n
items, in order from top to bottom, ordered by mapping the values through the given block.
Returns an Array
even when n
is 1. Values that are tied after mapping are returned in the initial order.
If no block is given, an enumerator is returned instead.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/mug/top.rb', line 35 def top_by n=1, &blk return enum_for(:top_by, n) unless block_given? chain = {} each do |x| y = yield x chain[y] ||= [] chain[y] << x end ary = [] chain.keys.sort.reverse.each do |k| ary += chain[k] break if ary.length > n end ary[0...n] end |