diff options
| author | Jun Hiroe <[email protected]> | 2014-04-21 13:28:56 +0900 |
|---|---|---|
| committer | Jun Hiroe <[email protected]> | 2014-04-21 13:52:50 +0900 |
| commit | fcfab845602e25520e51f60ad33e4eb16dd58395 (patch) | |
| tree | 9500ec081bb607778c2bb8b005128f9f3ee2ff3f /mrbgems/mruby-array-ext/mrblib/array.rb | |
| parent | e7f5cd7d4e21fe70aac62297c97e4ae70fad1e5f (diff) | |
| download | mruby-fcfab845602e25520e51f60ad33e4eb16dd58395.tar.gz mruby-fcfab845602e25520e51f60ad33e4eb16dd58395.zip | |
Add Array#reject_bang
Diffstat (limited to 'mrbgems/mruby-array-ext/mrblib/array.rb')
| -rw-r--r-- | mrbgems/mruby-array-ext/mrblib/array.rb | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/mrbgems/mruby-array-ext/mrblib/array.rb b/mrbgems/mruby-array-ext/mrblib/array.rb index 43d77b5f6..78d9ff78a 100644 --- a/mrbgems/mruby-array-ext/mrblib/array.rb +++ b/mrbgems/mruby-array-ext/mrblib/array.rb @@ -456,4 +456,38 @@ class Array end self end + + ## + # call-seq: + # ary.reject! { |item| block } -> ary or nil + # ary.reject! -> Enumerator + # + # Equivalent to Array#delete_if, deleting elements from +self+ for which the + # block evaluates to +true+, but returns +nil+ if no changes were made. + # + # The array is changed instantly every time the block is called, not after + # the iteration is over. + # + # See also Enumerable#reject and Array#delete_if. + # + # If no block is given, an Enumerator is returned instead. + + def reject!(&block) + return to_enum :reject! unless block_given? + + len = self.size + idx = 0 + while idx < self.size do + if block.call(self[idx]) + self.delete_at(idx) + else + idx += 1 + end + end + if self.size == len + nil + else + self + end + end end |
