我在Ruby中有一个元素数组

[2,4,6,3,8]

例如,我需要删除值为3的元素

我怎么做呢?


当前回答

你也可以猴子修补它。我一直不明白为什么Ruby对哈希有except方法,而对数组没有:

class Array
  def except value
    value = value.kind_of(Array) ? value : [value]
    self - value
  end
end

现在你可以做:

[1,3,7,"436",354,nil].except(354) #=> [1,3,7,"436",nil]

Or:

[1,3,7,"436",354,nil].except([354, 1]) #=> [3,7,"436",nil]

其他回答

我不确定是否有人已经声明了这一点,但Array.delete()和-= value将删除数组中传递给它的每个值的实例。为了删除特定元素的第一个实例,您可以执行如下操作

arr = [1,3,2,44,5]
arr.delete_at(arr.index(44))

#=> [1,3,2,5]

有一种更简单的方法。我并不是说这是最佳实践,但这是应该被认可的。

如果你还想让这个删除操作具有可链性,这样你就可以删除一些项并继续在结果数组上进行链接操作,请使用tap:

[2, 4, 6, 3, 8].tap { |ary| ary.delete(3) }.count #=> 4

我想我明白了:

a = [3, 2, 4, 6, 3, 8]
a.delete(3)
#=> 3
a
#=> [2, 4, 6, 8]

借用Travis的评论,这是一个更好的答案:

我个人喜欢[1,2,7,4,5]-[7],结果=>[1,2,4,5]从irb

我修改了他的答案,因为3是他示例数组中的第三个元素。对于那些没有意识到3在数组中的位置2的人来说,这可能会导致一些困惑。

另一个选择:

a = [2,4,6,3,8]

a -= [3]

结果是

=> [2, 4, 6, 8]