* 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
This commit is contained in:
knu 2015-11-16 07:29:37 +00:00
Родитель 468cf2704c
Коммит 4f018492d3
2 изменённых файлов: 14 добавлений и 23 удалений

Просмотреть файл

@ -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.

Просмотреть файл

@ -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