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