summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--lib/set.rb31
2 files changed, 14 insertions, 23 deletions
diff --git a/ChangeLog b/ChangeLog
index 2807acd..81e4774 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 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