由於@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謝謝,能否讓我知道原因 –