有三个类别
categories = ["Category test 1 2", "Category test 1 3", "Category test 1 4"]
当我删除Category test 1 2
时,数组变为["Category test 1 3", "Category test 1 4"]
,此时i
的值为0
,但在下一次迭代中,i
的值为{ {1}}并且索引位置的值为1
因此,由于Category test 1 4
的隐藏类别未显示,因此未使用值Category test 1 3
。
我使用方法Category test 1 3
我希望在下一次迭代中,它应该取值categories.delete_at(i)
而不是Category test 1 3
。
答案 0 :(得分:1)
你可以把逻辑放在这里,例如。
temp1, temp2 = [1,2,3,4,5,5,6,7], []
temp3 = temp1.clone
4.times { |h| temp2 = temp1.clone; temp2.delete_at(h); temp3.delete((temp1 - temp2)[0]) }
temp1 = temp3.clone
=> [5, 5, 6, 7]
答案 1 :(得分:0)
如果您想删除第一个类别,可以在i = 0
之前设置categories.delete_at(i)
i = 0
categories.delete_at(i)
希望有所帮助!
答案 2 :(得分:0)
据我了解,您希望逐个删除Array的所有元素,然后您可以使用 Array#delete_if
categories.delete_if{|a| p a}
"Category test 1 2"
"Category test 1 3"
"Category test 1 4"
=> []
如果您关注的是仅在"Category test 1 3"
之后删除"Category test 1 2"
,则最后一个元素"Category test 1 4"
应保持不变..
> categories.each{|a| p categories.delete_at(0)}
"Category test 1 2"
"Category test 1 3"
=> ["Category test 1 4"]
让我向您解释一下您的问题。你可能会做这样的事情:
categories.each_with_index do |e,i|
categories.delete_at(i)
end
在第一次循环中,索引将为0
,因此它会从"Category 1 2"
中删除第一个元素categories
,它仍然类似于:
["Category test 1 3", "Category test 1 4"]
现在在第二个循环中,索引将为1
,在索引1
的剩余数组元素中,将声明"Category test 1 4"
。所以它现在删除了这个元素而不是"Category test 1 3"
现在在0
索引上声明的那个元素。
我希望它可以帮到你。如果您有任何进一步的查询,请随时发表评论。