summaryrefslogtreecommitdiff
path: root/lib/set.rb
diff options
context:
space:
mode:
authorknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-11-16 07:29:37 +0000
committerknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-11-16 07:29:37 +0000
commit4f018492d347839a0ae146c051821c11f4f54912 (patch)
tree00fd88a2fa5902a7a074c24a6fbcbf7bd864176a /lib/set.rb
parent468cf2704c27e7ec7554ece56a3ea243da9114d0 (diff)
* lib/set.rb (Hash#flatten!, #add?, #delete?, #collect!, #reject!,
#select!, #^, #classify): Micro-optimize some methods for performance and readability. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52591 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/set.rb')
-rw-r--r--lib/set.rb31
1 files changed, 8 insertions, 23 deletions
diff --git a/lib/set.rb b/lib/set.rb
index 17775b0..9908aa6 100644
--- a/lib/set.rb
+++ b/lib/set.rb
@@ -200,11 +200,7 @@ class Set
# Equivalent to Set#flatten, but replaces the receiver with the
# result in place. Returns nil if no modifications were made.
def flatten!
- if detect { |e| e.is_a?(Set) }
- replace(flatten())
- else
- nil
- end
+ replace(flatten()) if any? { |e| e.is_a?(Set) }
end
# Returns true if the set contains the given object.
@@ -320,11 +316,7 @@ class Set
# Adds the given object to the set and returns self. If the
# object is already in the set, returns nil.
def add?(o)
- if include?(o)
- nil
- else
- add(o)
- end
+ add(o) unless include?(o)
end
# Deletes the given object from the set and returns self. Use +subtract+ to
@@ -337,11 +329,7 @@ class Set
# Deletes the given object from the set and returns self. If the
# object is not in the set, returns nil.
def delete?(o)
- if include?(o)
- delete(o)
- else
- nil
- end
+ delete(o) if include?(o)
end
# Deletes every element of the set for which block evaluates to
@@ -367,9 +355,7 @@ class Set
# Replaces the elements with ones returned by collect().
def collect!
block_given? or return enum_for(__method__)
- set = self.class.new
- each { |o| set << yield(o) }
- replace(set)
+ replace(self.class.new(self) { |o| yield(o) })
end
alias map! collect!
@@ -379,7 +365,7 @@ class Set
block or return enum_for(__method__)
n = size
delete_if(&block)
- size == n ? nil : self
+ self if size != n
end
# Equivalent to Set#keep_if, but returns nil if no changes were
@@ -388,7 +374,7 @@ class Set
block or return enum_for(__method__)
n = size
keep_if(&block)
- size == n ? nil : self
+ self if size != n
end
# Merges the elements of the given enumerable object to the set and
@@ -439,7 +425,7 @@ class Set
# ((set | enum) - (set & enum)).
def ^(enum)
n = Set.new(enum)
- each { |o| if n.include?(o) then n.delete(o) else n.add(o) end }
+ each { |o| n.add(o) unless n.delete?(o) }
n
end
@@ -485,8 +471,7 @@ class Set
h = {}
each { |i|
- x = yield(i)
- (h[x] ||= self.class.new).add(i)
+ (h[yield(i)] ||= self.class.new).add(i)
}
h