Class: Set
Constant Summary
Constants included
from Enumerable
Enumerable::NONE
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Enumerable
__update_hash, #all?, #any?, #chain, #collect, #count, #cycle, #detect, #drop, #drop_while, #each_cons, #each_slice, #each_with_index, #each_with_object, #entries, #filter_map, #find_all, #find_index, #first, #flat_map, #grep, #group_by, #inject, #lazy, #max, #max_by, #min, #min_by, #minmax, #minmax_by, #none?, #one?, #partition, #reject, #reverse_each, #sort, #sort_by, #sum, #take, #take_while, #tally, #to_h, #uniq, #zip
Constructor Details
#initialize(enum = nil, &block) ⇒ Set
Returns a new instance of Set.
22
23
24
25
26
27
28
29
30
31
32
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 22
def initialize(enum = nil, &block)
@hash ||= Hash.new
enum.nil? and return
if block_given?
__do_with_enum(enum) { |o| add(block.call(o)) }
else
merge(enum)
end
end
|
Class Method Details
18
19
20
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 18
def self.[](*ary)
new(ary)
end
|
Instance Method Details
#&(enum) ⇒ Object
Also known as:
intersection
241
242
243
244
245
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 241
def &(enum)
n = Set.new
__do_with_enum(enum) { |o| n.add(o) if include?(o) }
n
end
|
#-(enum) ⇒ Object
Also known as:
difference
236
237
238
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 236
def -(enum)
dup.subtract(enum)
end
|
264
265
266
267
268
269
270
271
272
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 264
def <=>(set)
return unless set.is_a?(Set)
case size <=> set.size
when -1 then -1 if proper_subset?(set)
when +1 then +1 if proper_superset?(set)
else 0 if self.==(set)
end
end
|
#==(other) ⇒ Object
252
253
254
255
256
257
258
259
260
261
262
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 252
def ==(other)
if self.equal?(other)
true
elsif other.instance_of?(self.class) && self.size == other.size
@hash == other.__get_hash
elsif other.is_a?(self.class) && self.size == other.size
other.all? { |o| include?(o) }
else
false
end
end
|
248
249
250
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 248
def ^(enum)
(self | Set.new(enum)) - (self & Set.new(enum))
end
|
#__do_with_enum(enum, &block) ⇒ Object
5
6
7
8
9
10
11
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 5
def __do_with_enum(enum, &block)
if enum.respond_to?(:each)
enum.each(&block)
else
raise ArgumentError, "value must be enumerable"
end
end
|
#__get_hash ⇒ Object
internal method to get internal hash
14
15
16
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 14
def __get_hash
@hash
end
|
#_inspect(recur_list) ⇒ Object
309
310
311
312
313
314
315
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 309
def _inspect(recur_list)
return "#<#{self.class}: {}>" if empty?
return "#<#{self.class}: {...}>" if recur_list[self.object_id]
recur_list[self.object_id] = true
ary = map { |o| o._inspect(recur_list) }
"#<#{self.class}: {#{ary.join(", ")}}>"
end
|
#add(o) ⇒ Object
Also known as:
<<
153
154
155
156
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 153
def add(o)
@hash[o] = true
self
end
|
#add?(o) ⇒ Boolean
159
160
161
162
163
164
165
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 159
def add?(o)
if include?(o)
nil
else
add(o)
end
end
|
283
284
285
286
287
288
289
290
291
292
293
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 283
def classify
return to_enum :classify unless block_given?
h = {}
each { |i|
x = yield(i)
(h[x] ||= self.class.new).add(i)
}
h
end
|
53
54
55
56
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 53
def clear
@hash.clear
self
end
|
#collect! ⇒ Object
Also known as:
map!
192
193
194
195
196
197
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 192
def collect!
return to_enum :collect! unless block_given?
set = self.class.new
each { |o| set << yield(o) }
replace(set)
end
|
#delete(o) ⇒ Object
167
168
169
170
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 167
def delete(o)
@hash.delete(o)
self
end
|
#delete?(o) ⇒ Boolean
172
173
174
175
176
177
178
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 172
def delete?(o)
if include?(o)
delete(o)
else
nil
end
end
|
#delete_if ⇒ Object
180
181
182
183
184
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 180
def delete_if
return to_enum :delete_if unless block_given?
select { |o| yield o }.each { |o| @hash.delete(o) }
self
end
|
#disjoint?(set) ⇒ Boolean
143
144
145
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 143
def disjoint?(set)
!intersect?(set)
end
|
#divide(&func) ⇒ Object
295
296
297
298
299
300
301
302
303
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 295
def divide(&func)
return to_enum :divide unless block_given?
if func.arity == 2
raise NotImplementedError, "Set#divide with 2 arity block is not implemented."
end
Set.new(classify(&func).values)
end
|
#each(&block) ⇒ Object
147
148
149
150
151
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 147
def each(&block)
return to_enum :each unless block_given?
@hash.each_key(&block)
self
end
|
#empty? ⇒ Boolean
49
50
51
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 49
def empty?
@hash.empty?
end
|
#eql?(o) ⇒ Boolean
278
279
280
281
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 278
def eql?(o)
return false unless o.is_a?(Set)
@hash.eql?(o.__get_hash)
end
|
88
89
90
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 88
def flatten
self.class.new.flatten_merge(self)
end
|
92
93
94
95
96
97
98
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 92
def flatten!
if detect { |e| e.is_a?(Set) }
replace(flatten())
else
nil
end
end
|
#flatten_merge(set, seen = Set.new) ⇒ Object
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 70
def flatten_merge(set, seen = Set.new)
seen.add(set.object_id)
set.each { |e|
if e.is_a?(Set)
if seen.include?(e_id = e.object_id)
raise ArgumentError, "tried to flatten recursive Set"
end
flatten_merge(e, seen)
else
add(e)
end
}
seen.delete(set.object_id)
self
end
|
274
275
276
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 274
def hash
@hash.hash
end
|
#include?(o) ⇒ Boolean
Also known as:
member?, ===
100
101
102
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 100
def include?(o)
@hash.include?(o)
end
|
#initialize_copy(orig) ⇒ Object
34
35
36
37
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 34
def initialize_copy(orig)
super
@hash = orig.__get_hash.dup
end
|
#inspect ⇒ Object
Also known as:
to_s
317
318
319
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 317
def inspect
_inspect({})
end
|
#intersect?(set) ⇒ Boolean
134
135
136
137
138
139
140
141
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 134
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
|
#join(separator = nil) ⇒ Object
305
306
307
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 305
def join(separator = nil)
to_a.join(separator)
end
|
186
187
188
189
190
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 186
def keep_if
return to_enum :keep_if unless block_given?
reject { |o| yield o }.each { |o| @hash.delete(o) }
self
end
|
#merge(enum) ⇒ Object
215
216
217
218
219
220
221
222
223
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 215
def merge(enum)
if enum.instance_of?(self.class)
@hash.merge!(enum.__get_hash)
else
__do_with_enum(enum) { |o| add(o) }
end
self
end
|
#proper_subset?(set) ⇒ Boolean
Also known as:
<
127
128
129
130
131
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 127
def proper_subset?(set)
raise ArgumentError, "value must be a set" unless set.is_a?(Set)
return false if set.size <= size
all? { |o| set.include?(o) }
end
|
#proper_superset?(set) ⇒ Boolean
Also known as:
>
113
114
115
116
117
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 113
def proper_superset?(set)
raise ArgumentError, "value must be a set" unless set.is_a?(Set)
return false if size <= set.size
set.all? { |o| include?(o) }
end
|
#reject!(&block) ⇒ Object
200
201
202
203
204
205
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 200
def reject!(&block)
return to_enum :reject! unless block_given?
n = size
delete_if(&block)
size == n ? nil : self
end
|
#replace(enum) ⇒ Object
58
59
60
61
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 58
def replace(enum)
clear
merge(enum)
end
|
322
323
324
325
326
327
328
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 322
def reset
if frozen?
raise FrozenError, "can't modify frozen Set"
else
@hash.rehash
end
end
|
#select!(&block) ⇒ Object
Also known as:
filter!
207
208
209
210
211
212
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 207
def select!(&block)
return to_enum :select! unless block_given?
n = size
keep_if(&block)
size == n ? nil : self
end
|
#size ⇒ Object
Also known as:
length
def freeze
@hash.freeze
super
end
44
45
46
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 44
def size
@hash.size
end
|
#subset?(set) ⇒ Boolean
Also known as:
<=
120
121
122
123
124
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 120
def subset?(set)
raise ArgumentError, "value must be a set" unless set.is_a?(Set)
return false if set.size < size
all? { |o| set.include?(o) }
end
|
#subtract(enum) ⇒ Object
225
226
227
228
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 225
def subtract(enum)
__do_with_enum(enum) { |o| delete(o) }
self
end
|
#superset?(set) ⇒ Boolean
Also known as:
>=
106
107
108
109
110
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 106
def superset?(set)
raise ArgumentError, "value must be a set" unless set.is_a?(Set)
return false if size < set.size
set.all? { |o| include?(o) }
end
|
63
64
65
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 63
def to_a
@hash.keys
end
|
#|(enum) ⇒ Object
Also known as:
+, union
230
231
232
|
# File 'mruby/mrbgems/mruby-set/mrblib/set.rb', line 230
def |(enum)
dup.merge(enum)
end
|