Method: MARCSpec::MultiValueMap#optimize

Defined in:
lib/marcspec/multivaluemap.rb

#optimizeObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/marcspec/multivaluemap.rb', line 35

def optimize
  @super_regexp = Regexp.union @map.map{|pv| pv[0]}
  inverted = {}
  @map.each do |pv|
    inverted[pv[1]] ||= []
    inverted[pv[1]] << pv[0]
  end
  inverted.each_pair do |vals, patterns|
    next unless patterns.size > 1
    newpat = Regexp.union patterns
    patterns.each do |p|
      @map.delete_if{|pv| p == pv[0]}
    end
    @map << [newpat, vals]
  end
end