* 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:
marcandre 2010-05-30 13:19:09 +00:00
Родитель d346b26be4
Коммит 1d06ff9761
3 изменённых файлов: 34 добавлений и 0 удалений

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

@ -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
Просмотреть файл

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

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

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