зеркало из https://github.com/github/ruby.git
* 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:
Родитель
d346b26be4
Коммит
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>
|
||||
|
||||
* 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.
|
||||
nil means to use default completion proc.
|
||||
|
||||
* set
|
||||
* new methods:
|
||||
* Set#keep_if
|
||||
* Set#select!
|
||||
|
||||
* time
|
||||
* incompatible changes:
|
||||
* Time.parse raises ArgumentError when no date information.
|
||||
|
|
25
lib/set.rb
25
lib/set.rb
|
@ -266,6 +266,14 @@ class Set
|
|||
self
|
||||
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().
|
||||
def collect!
|
||||
block_given? or return enum_for(__method__)
|
||||
|
@ -284,6 +292,15 @@ class Set
|
|||
size == n ? nil : self
|
||||
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
|
||||
# returns self.
|
||||
def merge(enum)
|
||||
|
@ -563,6 +580,14 @@ class SortedSet < Set
|
|||
self
|
||||
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)
|
||||
@keys = nil
|
||||
super
|
||||
|
|
Загрузка…
Ссылка в новой задаче