* lib/set.rb (keep_if, select!): New methods [ruby-core:29749]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28096 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d346b26be4
commit
1d06ff9761
@ -1,3 +1,7 @@
|
|||||||
|
Sun May 30 22:18:49 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
|
||||||
|
|
||||||
|
* lib/set.rb (keep_if, select!): New methods [ruby-core:29749]
|
||||||
|
|
||||||
Sun May 30 21:51:59 2010 Yusuke Endoh <mame@tsg.ne.jp>
|
Sun May 30 21:51:59 2010 Yusuke Endoh <mame@tsg.ne.jp>
|
||||||
|
|
||||||
* test/rake/test_application.rb: update a test because of r28089.
|
* test/rake/test_application.rb: update a test because of r28089.
|
||||||
|
5
NEWS
5
NEWS
@ -373,6 +373,11 @@ with all sufficient information, see the ChangeLog file.
|
|||||||
* Readline.completion_proc= accepts nil.
|
* Readline.completion_proc= accepts nil.
|
||||||
nil means to use default completion proc.
|
nil means to use default completion proc.
|
||||||
|
|
||||||
|
* set
|
||||||
|
* new methods:
|
||||||
|
* Set#keep_if
|
||||||
|
* Set#select!
|
||||||
|
|
||||||
* time
|
* time
|
||||||
* incompatible changes:
|
* incompatible changes:
|
||||||
* Time.parse raises ArgumentError when no date information.
|
* Time.parse raises ArgumentError when no date information.
|
||||||
|
25
lib/set.rb
25
lib/set.rb
@ -266,6 +266,14 @@ class Set
|
|||||||
self
|
self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Deletes every element of the set for which block evaluates to
|
||||||
|
# false, and returns self.
|
||||||
|
def keep_if
|
||||||
|
block_given? or return enum_for(__method__)
|
||||||
|
to_a.each { |o| @hash.delete(o) unless yield(o) }
|
||||||
|
self
|
||||||
|
end
|
||||||
|
|
||||||
# Replaces the elements with ones returned by collect().
|
# Replaces the elements with ones returned by collect().
|
||||||
def collect!
|
def collect!
|
||||||
block_given? or return enum_for(__method__)
|
block_given? or return enum_for(__method__)
|
||||||
@ -284,6 +292,15 @@ class Set
|
|||||||
size == n ? nil : self
|
size == n ? nil : self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Equivalent to Set#keep_if, but returns nil if no changes were
|
||||||
|
# made.
|
||||||
|
def select!
|
||||||
|
block_given? or return enum_for(__method__)
|
||||||
|
n = size
|
||||||
|
keep_if { |o| yield(o) }
|
||||||
|
size == n ? nil : self
|
||||||
|
end
|
||||||
|
|
||||||
# Merges the elements of the given enumerable object to the set and
|
# Merges the elements of the given enumerable object to the set and
|
||||||
# returns self.
|
# returns self.
|
||||||
def merge(enum)
|
def merge(enum)
|
||||||
@ -563,6 +580,14 @@ class SortedSet < Set
|
|||||||
self
|
self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def keep_if
|
||||||
|
block_given? or return enum_for(__method__)
|
||||||
|
n = @hash.size
|
||||||
|
super
|
||||||
|
@keys = nil if @hash.size != n
|
||||||
|
self
|
||||||
|
end
|
||||||
|
|
||||||
def merge(enum)
|
def merge(enum)
|
||||||
@keys = nil
|
@keys = nil
|
||||||
super
|
super
|
||||||
|
Loading…
x
Reference in New Issue
Block a user