在Ruby中删除数组中的元素(不使用预制方法)

时间:2016-06-11 23:33:41

标签: arrays ruby pointers

我有以下数组
A = [1,2,3,4,5]
我现在正试图从数组中删除一个元素,比如说[4]。我知道要这样做你可以使用ruby方法,比如pop,但是,对于这个任务,我试图手动完成。

我曾尝试使用以下内容:
a [4] =零 但是,这只会导致此索引处的值被nil替换,而不是完全删除指向此值的指针(即:a.length仍然认为数组中的值为nil。)

正如我所看到的,关于我的问题有很多问题,我要强调的是,我要做的就是完成弹出自己的方法。到目前为止,我所能想到的是将数组的所有内容复制到一个新数组(长度减少1)并返回它。我不确定这是否是内部流行的方式,或者是否有更好的方法来做到这一点。

3 个答案:

答案 0 :(得分:1)

如果不使用Ruby方法,就无法在Ruby中完成它。

编辑(更多细节): Ruby是一个用C语言编写的scripting language。公平地说,我和其他许多人,我确定,理解你的意思,但严格来说,这是一个相当矛盾的问题;我确信这是预制的'您使用#pop#compact之类的方法,但如果不使用任何 Ruby方法,您将如何实现目标?!

答案 1 :(得分:0)

也许...

class Array
   def custom_remove(position)
     array = []
     each_with_index do |elm, index|
       next if position == index
       array << elm
     end
     array
   end
end


1.9.3-p545 :035 > class Array
1.9.3-p545 :036?>          def custom_remove(position)
1.9.3-p545 :037?>              array = []
1.9.3-p545 :038?>              each_with_index do |elm, index|
1.9.3-p545 :039 >                    next if position == index
1.9.3-p545 :040?>                  array << elm
1.9.3-p545 :041?>                end
1.9.3-p545 :042?>              array
1.9.3-p545 :043?>            end
1.9.3-p545 :044?>       end
 => nil
1.9.3-p545 :045 > a = [1,2,3,4,5]
 => [1, 2, 3, 4, 5]
1.9.3-p545 :046 > a.custom_remove(4)
 => [1, 2, 3, 4]

答案 2 :(得分:-1)

您仍然可以使用

a[4]=nil

但也有:

b = a.compact

它将返回一个没有nil的新数组。