delete_at

时间:2015-07-17 04:59:06

标签: ruby-on-rails ruby

有三个类别

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

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索引上声明的那个元素。

我希望它可以帮到你。如果您有任何进一步的查询,请随时发表评论。