diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | lib/set.rb | 31 |
2 files changed, 14 insertions, 23 deletions
@@ -1,3 +1,9 @@ +Mon Nov 16 16:28:30 2015 Akinori MUSHA <knu@iDaemons.org> + + * lib/set.rb (Hash#flatten!, #add?, #delete?, #collect!, #reject!, + #select!, #^, #classify): Micro-optimize some methods for + performance and readability. + Mon Nov 16 16:17:58 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org> * ChangeLog: fixed accidentally commit. diff --git a/lib/set.rb b/lib/set.rb index 17775b07ea..9908aa6458 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 |