lib/funkr/extensions/enumerable.rb in funkr-0.0.25 vs lib/funkr/extensions/enumerable.rb in funkr-0.0.26

- old
+ new

@@ -38,39 +38,39 @@ else return [ inc, self.drop(i) ] end end return [ inc, [] ] end - # Constitue des groupes disjoints de n éléments au plus + # builds up disjoint groups of n elements or less def groups_of(n) g = self.take(n) return [] if g.empty? [g] + self.drop(n).groups_of(n) end - # constitue des groupes de n éléments exactement, décalés de 1 + # builds up sliding groups of exactly n elements def sliding_groups_of(n) return [] if self.size < n [ self.take(n) ] + self.drop(1).sliding_groups_of(n) end - # trouve l'index d'une séquence + # find the position of a sequence + # [1,2,3,4,5,4,3,2,1].seq_index([4,3]) # => 5 def seq_index(seq) self.sliding_groups_of(seq.size).index(seq) end - # Prend un prédicat p(x,y), et construit un tableau dans lequel tous - # les couples (a,b), tels que 'a' précède 'b', vérifient p(a,b). + # Takes a block predicate p(x,y) and builds an array of elements so + # that for any (a,b), a being before b in the list, p(a,b) holds. def make_uniq_by(&block) result = [] self.each do |e| unless result.any?{|x| yield(x,e)} then result.push(e) end end return result end - # difference entre 2 tableaux, retourne le triplet [ [missing] , [intersection], [added] ] - # codé en impératif parce que inject est trop lent :( + # compare 2 enumerables, and returns [ [missing] , [intersection], [added] ] def diff_with(other, &block) m, i, a = [], [], [] u_s = self.make_uniq_by(&block) u_o = other.make_uniq_by(&block) u_s.each do |e|