From 4f018492d347839a0ae146c051821c11f4f54912 Mon Sep 17 00:00:00 2001 From: knu Date: Mon, 16 Nov 2015 07:29:37 +0000 Subject: [PATCH] * 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 --- ChangeLog | 6 ++++++ lib/set.rb | 31 ++++++++----------------------- 2 files changed, 14 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2807acdad0..81e4774d5c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Nov 16 16:28:30 2015 Akinori MUSHA + + * 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 * 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