在枚举该数组时从数组中删除元素

Posted

技术标签:

【中文标题】在枚举该数组时从数组中删除元素【英文标题】:Removing elements from an array while enumerating over that array 【发布时间】:2013-07-04 23:53:33 【问题描述】:

如果有人问过这个问题,请原谅我,我没有对 SO 进行足够好的搜索。

我正在执行以下操作来枚举子视图数组,同时从其父视图中删除每个子视图:

for( NSView *subview in [[self subviews] copy])

    [subview removeFromSuperview];

它工作正常,但是有没有更合适的方法来实现这个循环,而不是简单地复制数组?

【问题讨论】:

iPhone - Remove all SubViews? 的可能重复项 这是我所知道的最优雅的方式。 @Danilo 我想我正在寻求解决该问题的最佳方法。我有一个可行的解决方案,我想知道首选/更正确的方法。 【参考方案1】:

NSViewsubviews getter 直接返回它的可变数组而不复制它。所以如果你想删除特定的子视图,方法就是复制它。否则,在您的特定情况下,由于您要删除所有子视图,您可以将其子视图设置为空数组:

[self setSubviews: @[] ];

【讨论】:

【参考方案2】:

这是一个选项

for (int i = self.subviews.count - 1; i >= 0; --i) 
    UIView* v = self.subviews[i];
    [v removeFromSuperview];

【讨论】:

感谢您的回答。我想我正在寻找更优雅的东西,但我认为这同样适用。

以上是关于在枚举该数组时从数组中删除元素的主要内容,如果未能解决你的问题,请参考以下文章

jquery怎样向数组里添加一个元素?还有...

在迭代python时从剩余数组中找到2个元素的最小差异

NSMutableArray 删除可变数组元素

js怎么从数组中删除指定值(不是指定位置)的元素?

java中 如何在一个数组中删除里面的元素

排序算法:直接插入排序