From 312d49c59f2c91cbbbda2348fd126d004b9f11f0 Mon Sep 17 00:00:00 2001 From: leviongit Date: Sat, 13 Apr 2024 07:21:51 +0200 Subject: [PATCH] reimplement `Array#delete` in ruby --- mrblib/array.rb | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/mrblib/array.rb b/mrblib/array.rb index 6c2b6cfee..066f1d3a0 100644 --- a/mrblib/array.rb +++ b/mrblib/array.rb @@ -191,11 +191,32 @@ class Array # # Delete element with index +key+ def delete(key, &block) - while i = self.index(key) - self.delete_at(i) - ret = key + ret = key + i = 0 + j = 0 + len = self.length + while i < len + elem = self[i] + + if key == elem + ret = elem + i += 1 + next + end + + self[j] = elem if i != j + + i += 1 + j += 1 end - return block.call if ret.nil? && block + + if i == j + return block.call if block + return nil + end + + self.replace(self[0...j]) + ret end