我在Ruby中有一个元素数组
[2,4,6,3,8]
例如,我需要删除值为3的元素
我怎么做呢?
我在Ruby中有一个元素数组
[2,4,6,3,8]
例如,我需要删除值为3的元素
我怎么做呢?
当前回答
我不确定是否有人已经声明了这一点,但Array.delete()和-= value将删除数组中传递给它的每个值的实例。为了删除特定元素的第一个实例,您可以执行如下操作
arr = [1,3,2,44,5]
arr.delete_at(arr.index(44))
#=> [1,3,2,5]
有一种更简单的方法。我并不是说这是最佳实践,但这是应该被认可的。
其他回答
借用Travis的评论,这是一个更好的答案:
我个人喜欢[1,2,7,4,5]-[7],结果=>[1,2,4,5]从irb
我修改了他的答案,因为3是他示例数组中的第三个元素。对于那些没有意识到3在数组中的位置2的人来说,这可能会导致一些困惑。
我改进了尼尔斯的解决方案
class Array
def except(*values)
self - values
end
end
现在你可以使用
[1, 2, 3, 4].except(3, 4) # return [1, 2]
[1, 2, 3, 4].except(4) # return [1, 2, 3]
另一个选择:
a = [2,4,6,3,8]
a -= [3]
结果是
=> [2, 4, 6, 8]
在ruby中编译所有不同的delete选项
delete -按值删除匹配的元素。如果有多个值匹配,则删除所有值。如果您不关心出现的次数或确定单个出现,则使用此方法。
a = [2, 6, 3, 5, 3, 7]
a.delete(3) # returns 3
puts a # return [2, 6, 5, 7]
delete_at -删除给定索引处的元素。如果你知道索引,就用这个方法。
# continuing from the above example
a.delete_at(2) # returns 5
puts a # returns [2, 6, 7]
delete_if -删除block为true的每个元素。这将修改数组。数组在调用块时立即改变。
b = [1, 2, 5, 4, 9, 10, 11]
b.delete_if {|n| n >= 10}. # returns [1, 2, 5, 4, 9]
reject -该函数将返回包含给定块为false的元素的新数组。顺序是用这个来维持的。
c = [1, 2, 5, 4, 9, 10, 11]
c.reject {|n| n >= 10}. # returns [1, 2, 5, 4, 9]
拒绝!-同delete_if。数组在调用块时可能不会立即改变。 如果你想从数组中删除多个值,最好的选择如下所示。
a = [2, 3, 7, 4, 6, 21, 13]
b = [7, 21]
a = a - b # a - [2, 3, 4, 6, 13]
你可以简单地运行:
[2,4,6,3,8].delete(3)