Class: Multiset

### Home Classes Methods

### In Files

- lib/rack/mount/vendor/multimap/multiset.rb

### Parent

Set

### Methods

- #&
- #<<
- #==
- #^
- #add
- #cardinality
- #delete
- #delete_if
- #each
- #eql?
- #intersection
- #length
- #merge
- #multiplicity
- #proper_subset?
- #proper_superset?
- #size
- #subset?
- #subtract
- #superset?
- #to_a

### Files

- LICENSE
- README.rdoc

### Class/Module Index

Quicksearch

- Rack
- Rack::Mount
- Rack::Mount::Analysis
- Rack::Mount::Analysis::Splitting
- Rack::Mount::Analysis::Splitting::Key
- Rack::Mount::GeneratableRegexp
- Rack::Mount::GeneratableRegexp::InstanceMethods
- Rack::Mount::RegexpWithNamedGroups
- Rack::Mount::Route
- Rack::Mount::RouteSet
- Rack::Mount::RoutingError
- Rack::Mount::Strexp
- Rack::Mount::StrexpParser
- Rack::Mount::StrexpParser::ScanError
- Rack::Mount::Utils
- Regin
- Regin::Alternation
- Regin::Anchor
- Regin::Atom
- Regin::Character
- Regin::CharacterClass
- Regin::Collection
- Regin::Expression
- Regin::Group
- Regin::Options
- Regin::Parser
- Regin::Parser::ScanError
- Multimap
- Multiset
- NestedMultimap

No matching classes.

# Multiset

Multiset implements a collection of unordered values and allows duplicates.

## Example

    require 'multiset'
    s1 = Multiset.new [1, 2]              # -> #<Multiset: {1, 2}>
    s1.add(2)                             # -> #<Multiset: {1, 2, 2}>
    s1.merge([2, 6])                      # -> #<Multiset: {1, 2, 2, 2, 3}>
    s1.multiplicity(2)                    # -> 3
    s1.multiplicity(3)                    # -> 1

### Public Instance Methods

&(enum) click to toggle source

Returns a new set containing elements common to the set and the given enumerable object.

    # File lib/rack/mount/vendor/multimap/multiset.rb, line 129
    def &(enum)
      s = dup
      n = self.class.new
      enum.each { |o|
        if s.include?(o)
          s.delete(o, 1)
          n.add(o)
        end
      }
      n
    end

Also aliased as: intersection
<<(o) click to toggle source
Alias for: add
==(set) click to toggle source
Alias for: eql?
^(enum) click to toggle source

Returns a new set containing elements exclusive between the set and the given enumerable object. (set ^ enum) is equivalent to ((set | enum) - (set & enum)).

    # File lib/rack/mount/vendor/multimap/multiset.rb, line 145
    def ^(enum)
      n = self.class.new(enum)
      each { |o| n.include?(o) ? n.delete(o, 1) : n.add(o) }
      n
    end

add(o) click to toggle source

Adds the given object to the set and returns self. Use `merge` to add many elements at once.

    # File lib/rack/mount/vendor/multimap/multiset.rb, line 80
    def add(o)
      @hash[o] ||= 0
      @hash[o] += 1
      self
    end

Also aliased as: <<
cardinality() click to toggle source

Returns the total number of elements in a multiset, including repeated memberships

    # File lib/rack/mount/vendor/multimap/multiset.rb, line 27
    def cardinality
      @hash.inject(0) { |s, (e, m)| s += m }
    end

Also aliased as: size, length
delete(o, n = nil) click to toggle source

Deletes all the identical object from the set and returns self. If `n` is given, it will remove that amount of identical objects from the set. Use `subtract` to delete many different items at once.

    # File lib/rack/mount/vendor/multimap/multiset.rb, line 93
    def delete(o, n = nil)
      if n
        @hash[o] ||= 0
        @hash[o] -= n if @hash[o] > 0
        @hash.delete(o) if @hash[o] == 0
      else
        @hash.delete(o)
      end
      self
    end

delete_if() click to toggle source

Deletes every element of the set for which block evaluates to true, and returns self.

    # File lib/rack/mount/vendor/multimap/multiset.rb, line 108
    def delete_if
      each { |o| delete(o) if yield(o) }
      self
    end

each() click to toggle source

Calls the given block once for each element in the set, passing the element as parameter. Returns an enumerator if no block is given.

    # File lib/rack/mount/vendor/multimap/multiset.rb, line 69
    def each
      @hash.each_pair do |key, multiplicity|
        multiplicity.times do
          yield(key)
        end
      end
      self
    end

eql?(set) click to toggle source

Returns true if two sets are equal. Two multisets are equal if they have the same cardinalities and each element has the same multiplicity in both sets. The equality of each element inside the multiset is defined according to Object#eql?.

    # File lib/rack/mount/vendor/multimap/multiset.rb, line 155
    def eql?(set)
      return true if equal?(set)
      set = self.class.new(set) unless set.is_a?(self.class)
      return false unless cardinality == set.cardinality
      superset?(set) && subset?(set)
    end

Also aliased as: ==
intersection(enum) click to toggle source
Alias for: &
length() click to toggle source
Alias for: cardinality
merge(enum) click to toggle source

Merges the elements of the given enumerable object to the set and returns self.

    # File lib/rack/mount/vendor/multimap/multiset.rb, line 115
    def merge(enum)
      enum.each { |o| add(o) }
      self
    end

multiplicity(e) click to toggle source

Returns the number of times an element belongs to the multiset.

    # File lib/rack/mount/vendor/multimap/multiset.rb, line 21
    def multiplicity(e)
      @hash[e]
    end

proper_subset?(set) click to toggle source

Returns true if the set is a proper subset of the given set.

    # File lib/rack/mount/vendor/multimap/multiset.rb, line 60
    def proper_subset?(set)
      set.is_a?(self.class) or raise ArgumentError, "value must be a set"
      return false if set.cardinality <= cardinality
      all? { |o| multiplicity(o) <= set.multiplicity(o) }
    end

proper_superset?(set) click to toggle source

Returns true if the set is a proper superset of the given set.

    # File lib/rack/mount/vendor/multimap/multiset.rb, line 46
    def proper_superset?(set)
      set.is_a?(self.class) or raise ArgumentError, "value must be a set"
      return false if cardinality <= set.cardinality
      set.all? { |o| set.multiplicity(o) <= multiplicity(o) }
    end

size() click to toggle source
Alias for: cardinality
subset?(set) click to toggle source

Returns true if the set is a subset of the given set.

    # File lib/rack/mount/vendor/multimap/multiset.rb, line 53
    def subset?(set)
      set.is_a?(self.class) or raise ArgumentError, "value must be a set"
      return false if set.cardinality < cardinality
      all? { |o| multiplicity(o) <= set.multiplicity(o) }
    end

subtract(enum) click to toggle source

Deletes every element that appears in the given enumerable object and returns self.

    # File lib/rack/mount/vendor/multimap/multiset.rb, line 122
    def subtract(enum)
      enum.each { |o| delete(o, 1) }
      self
    end

superset?(set) click to toggle source

Returns true if the set is a superset of the given set.

    # File lib/rack/mount/vendor/multimap/multiset.rb, line 39
    def superset?(set)
      set.is_a?(self.class) or raise ArgumentError, "value must be a set"
      return false if cardinality < set.cardinality
      set.all? { |o| set.multiplicity(o) <= multiplicity(o) }
    end

to_a() click to toggle source

Converts the set to an array. The order of elements is uncertain.

    # File lib/rack/mount/vendor/multimap/multiset.rb, line 34
    def to_a
      inject([]) { |ary, (key, _)| ary << key }
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.