Class: Set
Overview
Portions Copyright (c) 2002-2013 Akinori MUSHA [email protected]
Class Method Summary collapse
Instance Method Summary collapse
- #-(enum) ⇒ Object (also: #difference)
- #==(other) ⇒ Object
- #add(o) ⇒ Object (also: #<<)
- #add?(o) ⇒ Boolean
- #classify(&block) ⇒ Object
- #clear ⇒ Object
- #collect!(&block) ⇒ Object (also: #map!)
- #delete(o) ⇒ Object
- #delete?(o) ⇒ Boolean
- #delete_if ⇒ Object
- #disjoint?(set) ⇒ Boolean
- #dup ⇒ Object
- #each(&block) ⇒ Object
- #empty? ⇒ Boolean
- #eql?(other) ⇒ Boolean
- #include?(o) ⇒ Boolean (also: #member?)
- 
  
    
      #initialize(enum = nil, &block)  ⇒ Set 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of Set. 
- #inspect ⇒ Object
- #intersect?(set) ⇒ Boolean
- #keep_if ⇒ Object
- #merge(enum) ⇒ Object
- #proper_subset?(set) ⇒ Boolean (also: #<)
- #proper_superset?(set) ⇒ Boolean (also: #>)
- #reject!(&block) ⇒ Object
- #replace(enum) ⇒ Object
- #select!(&block) ⇒ Object (also: #filter!)
- #size ⇒ Object (also: #length)
- #subset?(set) ⇒ Boolean (also: #<=)
- #subtract(enum) ⇒ Object
- #superset?(set) ⇒ Boolean (also: #>=)
- #to_a ⇒ Object
- #|(enum) ⇒ Object (also: #+, #union)
Methods included from Enumerable
Constructor Details
#initialize(enum = nil, &block) ⇒ Set
Returns a new instance of Set.
| 9 10 11 12 13 14 15 16 17 18 19 20 | # File 'opal/stdlib/set.rb', line 9 def initialize(enum = nil, &block) @hash = {} return if enum.nil? raise ArgumentError, 'value must be enumerable' unless Enumerable === enum if block enum.each { |item| add yield(item) } else merge(enum) end end | 
Class Method Details
.[](*ary) ⇒ Object
| 5 6 7 | # File 'opal/stdlib/set.rb', line 5 def self.[](*ary) new(ary) end | 
Instance Method Details
#-(enum) ⇒ Object Also known as: difference
| 27 28 29 30 31 32 33 | # File 'opal/stdlib/set.rb', line 27 def -(enum) unless enum.respond_to? :each raise ArgumentError, 'value must be enumerable' end dup.subtract(enum) end | 
#==(other) ⇒ Object
| 40 41 42 43 44 45 46 47 48 49 50 | # File 'opal/stdlib/set.rb', line 40 def ==(other) if equal?(other) true elsif other.instance_of?(self.class) @hash == other.instance_variable_get(:@hash) elsif other.is_a?(Set) && size == other.size other.all? { |o| @hash.include?(o) } else false end end | 
#add(o) ⇒ Object Also known as: <<
| 52 53 54 55 | # File 'opal/stdlib/set.rb', line 52 def add(o) @hash[o] = true self end | 
#add?(o) ⇒ Boolean
| 118 119 120 121 122 123 124 | # File 'opal/stdlib/set.rb', line 118 def add?(o) if include?(o) nil else add(o) end end | 
#classify(&block) ⇒ Object
| 58 59 60 61 62 63 64 65 66 | # File 'opal/stdlib/set.rb', line 58 def classify(&block) return enum_for(:classify) unless block_given? result = Hash.new { |h, k| h[k] = self.class.new } each { |item| result[yield(item)].add item } result end | 
#clear ⇒ Object
| 140 141 142 143 | # File 'opal/stdlib/set.rb', line 140 def clear @hash.clear self end | 
#collect!(&block) ⇒ Object Also known as: map!
| 68 69 70 71 72 73 | # File 'opal/stdlib/set.rb', line 68 def collect!(&block) return enum_for(:collect!) unless block_given? result = self.class.new each { |item| result << yield(item) } replace result end | 
#delete(o) ⇒ Object
| 76 77 78 79 | # File 'opal/stdlib/set.rb', line 76 def delete(o) @hash.delete(o) self end | 
#delete?(o) ⇒ Boolean
| 81 82 83 84 85 86 | # File 'opal/stdlib/set.rb', line 81 def delete?(o) if include?(o) delete(o) self end end | 
#delete_if ⇒ Object
| 88 89 90 91 92 93 94 | # File 'opal/stdlib/set.rb', line 88 def delete_if return enum_for(:delete_if) unless block_given? # @hash.delete_if should be faster, but using it breaks the order # of enumeration in subclasses. select { |o| yield o }.each { |o| @hash.delete(o) } self end | 
#disjoint?(set) ⇒ Boolean
| 221 222 223 | # File 'opal/stdlib/set.rb', line 221 def disjoint?(set) !intersect?(set) end | 
#dup ⇒ Object
| 22 23 24 25 | # File 'opal/stdlib/set.rb', line 22 def dup result = self.class.new result.merge(self) end | 
#each(&block) ⇒ Object
| 126 127 128 129 130 | # File 'opal/stdlib/set.rb', line 126 def each(&block) return enum_for(:each) unless block_given? @hash.each_key(&block) self end | 
#eql?(other) ⇒ Boolean
| 136 137 138 | # File 'opal/stdlib/set.rb', line 136 def eql?(other) @hash.eql?(other.instance_eval { @hash }) end | 
#include?(o) ⇒ Boolean Also known as: member?
| 145 146 147 | # File 'opal/stdlib/set.rb', line 145 def include?(o) @hash.include?(o) end | 
#inspect ⇒ Object
| 36 37 38 | # File 'opal/stdlib/set.rb', line 36 def inspect "#<Set: {#{to_a.join(',')}}>" end | 
#intersect?(set) ⇒ Boolean
| 211 212 213 214 215 216 217 218 219 | # File 'opal/stdlib/set.rb', line 211 def intersect?(set) raise ArgumentError, 'value must be a set' unless set.is_a?(Set) if size < set.size any? { |o| set.include?(o) } else set.any? { |o| include?(o) } end end | 
#keep_if ⇒ Object
| 96 97 98 99 100 | # File 'opal/stdlib/set.rb', line 96 def keep_if return enum_for(:keep_if) unless block_given? reject { |o| yield o }.each { |o| @hash.delete(o) } self end | 
#merge(enum) ⇒ Object
| 150 151 152 153 | # File 'opal/stdlib/set.rb', line 150 def merge(enum) enum.each { |item| add item } self end | 
#proper_subset?(set) ⇒ Boolean Also known as: <
| 203 204 205 206 207 | # File 'opal/stdlib/set.rb', line 203 def proper_subset?(set) set.is_a?(Set) || raise(ArgumentError, 'value must be a set') return false if set.size <= size all? { |o| set.include?(o) } end | 
#proper_superset?(set) ⇒ Boolean Also known as: >
| 187 188 189 190 191 | # File 'opal/stdlib/set.rb', line 187 def proper_superset?(set) set.is_a?(Set) || raise(ArgumentError, 'value must be a set') return false if size <= set.size set.all? { |o| include?(o) } end | 
#reject!(&block) ⇒ Object
| 102 103 104 105 106 107 | # File 'opal/stdlib/set.rb', line 102 def reject!(&block) return enum_for(:reject!) unless block_given? before = size delete_if(&block) size == before ? nil : self end | 
#replace(enum) ⇒ Object
| 155 156 157 158 159 160 | # File 'opal/stdlib/set.rb', line 155 def replace(enum) clear merge(enum) self end | 
#select!(&block) ⇒ Object Also known as: filter!
| 109 110 111 112 113 114 | # File 'opal/stdlib/set.rb', line 109 def select!(&block) return enum_for(:select!) unless block_given? before = size keep_if(&block) size == before ? nil : self end | 
#size ⇒ Object Also known as: length
| 162 163 164 | # File 'opal/stdlib/set.rb', line 162 def size @hash.size end | 
#subset?(set) ⇒ Boolean Also known as: <=
| 195 196 197 198 199 | # File 'opal/stdlib/set.rb', line 195 def subset?(set) set.is_a?(Set) || raise(ArgumentError, 'value must be a set') return false if set.size < size all? { |o| set.include?(o) } end | 
#subtract(enum) ⇒ Object
| 167 168 169 170 | # File 'opal/stdlib/set.rb', line 167 def subtract(enum) enum.each { |item| delete item } self end | 
#superset?(set) ⇒ Boolean Also known as: >=
| 179 180 181 182 183 | # File 'opal/stdlib/set.rb', line 179 def superset?(set) set.is_a?(Set) || raise(ArgumentError, 'value must be a set') return false if size < set.size set.all? { |o| include?(o) } end | 
#to_a ⇒ Object
| 228 229 230 | # File 'opal/stdlib/set.rb', line 228 def to_a @hash.keys end | 
#|(enum) ⇒ Object Also known as: +, union
| 172 173 174 175 176 177 | # File 'opal/stdlib/set.rb', line 172 def |(enum) unless enum.respond_to? :each raise ArgumentError, 'value must be enumerable' end dup.merge(enum) end |