module Enumerable

Public Instance Methods

counted_set() click to toggle source
# File lib/functions/prelude_enumerable/enumerable.rb, line 20
def counted_set 
  self.inject( Hash.new(0) ) { |h,e| h[e] += 1; h } 
end
grouped_by(&f) click to toggle source
# File lib/functions/prelude_enumerable/enumerable.rb, line 24
def grouped_by &f
  self.group_by(&f).values
end
interleave(ys) click to toggle source
# File lib/functions/prelude_enumerable/enumerable.rb, line 28
def interleave ys
  self.zip(ys).flatten.compact
end
merge(ys, &f) click to toggle source

merges two ordered lists by a function f that compares the values if no function is given the values are compared by the “<” operator

# File lib/functions/prelude_enumerable/enumerable.rb, line 34
def merge ys, &f

  return self.dup if ys.empty?
  return ys.dup if self.empty?

  x, *xt = self
  y, *yt = ys

  return ys.merge(xt, &f) >> x if ( f.nil? ? x < y : f.(x,y) )
  return self.merge(yt, &f) >> y

end
split_in(n) click to toggle source

splits a list xs in n peices

# File lib/functions/prelude_enumerable/enumerable.rb, line 12
def split_in(n) 
  (split = self.each_slice((self.length+1)/n).to_a).concat [[]] * (n-split.length)
end
split_in_half() click to toggle source
# File lib/functions/prelude_enumerable/enumerable.rb, line 16
def split_in_half 
  split_in(2)
end
unzip() click to toggle source
# File lib/functions/prelude_enumerable/enumerable.rb, line 7
def unzip
  self.transpose
end
zip_map(*lists, &b) click to toggle source
# File lib/functions/prelude_enumerable/enumerable.rb, line 3
def zip_map *lists, &b
  self.zip(*lists).map(&b)
end