由于@steenslag已经指出的那样,delete
方法做你想要什么:
n = [1,2,3,3,4,5,6,3,4,5,3,2,1,8]
n.delete(3)
n
回报:[1, 2, 4, 5, 6, 4, 5, 2, 1, 8]
这是值得看的这个替代代码:
nums = [3,3]
def remove_element(nums, val)
nums.each_with_index do |num,index|
nums_before_slice = nums.clone
if num == val
sliced = nums.slice!(index)
end
puts "nums: #{nums_before_slice}, index: #{index}, sliced: #{sliced.inspect}"
end
end
remove_element(nums,3)
puts "Result: #{nums.inspect}"
输出结果为:
正如您所看到的,迭代只发生一次,因为第二个元素在进行第二次迭代之前已被删除。
这个结果比较这个版本的代码:
nums = [3,3]
def remove_element(nums, val)
nums.clone.each_with_index do |num,index|
nums_before_slice = nums.clone
if num == val
sliced = nums.slice!(index)
end
puts "nums: #{nums_before_slice}, index: #{index}, sliced: #{sliced.inspect}"
end
end
remove_element(nums,3)
puts "Result: #{nums.inspect}"
导致:
nums: [3, 3], index: 0, sliced: 3
nums: [3], index: 1, sliced: nil
Result: [3]
这就是现在运行在原有nums
副本的迭代,但结果是与第二次迭代相同 - 没有第二个要移除的元素。
千万不要尝试在迭代它来修改阵列。调查员疯了。 – mudasobwa
不要修改您正在迭代的相同数组。 –
@mudasobwa谢谢,能否让我知道原因 –