class Array

Public Instance Methods

recode_repeated() click to toggle source

Recode repeated values on an array, adding the number of repetition at the end Example:

a=%w{a b c c d d d e}
a.recode_repeated
=> ["a","b","c_1","c_2","d_1","d_2","d_3","e"]
# File lib/statsample.rb, line 62
def recode_repeated
  if self.size!=self.uniq.size
    # Find repeated
    repeated=self.inject({}) {|a,v|
    (a[v].nil? ? a[v]=1 : a[v]+=1); a }.find_all{|k,v| v>1}.collect{|k,v| k}
    ns=repeated.inject({}) {|a,v| a[v]=0;a}
    self.collect do |f|
      if repeated.include? f
        ns[f]+=1
        sprintf("%s_%d",f,ns[f])
      else
        f
      end
    end
  else
    self
  end
end