diff options
Diffstat (limited to 'mrbgems/mruby-array-ext/mrblib/array.rb')
| -rw-r--r-- | mrbgems/mruby-array-ext/mrblib/array.rb | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/mrbgems/mruby-array-ext/mrblib/array.rb b/mrbgems/mruby-array-ext/mrblib/array.rb index bddcd8ab8..3a4b1460b 100644 --- a/mrbgems/mruby-array-ext/mrblib/array.rb +++ b/mrbgems/mruby-array-ext/mrblib/array.rb @@ -675,16 +675,11 @@ class Array def select!(&block) return to_enum :select! unless block_given? - idx = 0 - len = self.size - while idx < self.size do - if block.call(self[idx]) - idx += 1 - else - self.delete_at(idx) - end + result = [] + self.each do |x| + result << x if block.call(x) end - return nil if self.size == len - self + return nil if self.size == result.size + self.replace(result) end end |
