如何在Objective-C中检查空数组

如何在Objective-C中检查空数组,objective-c,nsmutablearray,Objective C,Nsmutablearray,我有一个数组。在该数组中,我要检查数组是否为空,然后将其删除。我试图检查数组是否为零或计数为0,但不起作用 这是我的阵列: data( ( abc, xyz ), ( yui, hsjd ), ( ), ) 在数据数组中,最后一个数组为空,我想从数据数组中删除。请给我一些建议。注意:不要因为某个问题已经被否决了,所以这是一个公平的游戏,而先尝试阅读包含稳定方式和潜在不稳定方式的答案 您的数据数组基本上是一个数组数组。将数据数组设置为NSMutableArray,如下所示: data = [[N

我有一个数组。在该数组中,我要检查数组是否为空,然后将其删除。我试图检查数组是否为零或计数为0,但不起作用

这是我的阵列:

data(
(
abc,
xyz
),
(
yui,
hsjd
),
(
),
)
在数据数组中,最后一个数组为空,我想从数据数组中删除。请给我一些建议。

注意:不要因为某个问题已经被否决了,所以这是一个公平的游戏,而先尝试阅读包含稳定方式和潜在不稳定方式的答案

您的数据数组基本上是一个数组数组。将数据数组设置为NSMutableArray,如下所示:

data = [[NSMutableArray alloc] initWithArray: data];
现在移除空的封闭阵列,如下所示:

data = [[NSMutableArray alloc] initWithArray: data];
稳定方式

或者通过这种根本不被推荐的方法,但我只是把它放在那里,因为它对我有用。但我建议您使用第一种方法

潜在不稳定方式


这将删除数据中包含的空数组。

简单的方法是循环遍历数组中的每个子数组,并检查它是否为空。由于不能在循环时删除条目,所以只需保留一个计数器,然后将其删除即可

在Swift 2.0中

var arrays = [["abc","def"],["ghi","jkl"],[], ["mno"], [], ["pqr"], [], ["stv"]]
var numberToRemove = 0
for idx in 0..<arrays.count {
if arrays[idx].isEmpty {
    numberToRemove++
    arrays.insert(arrays.removeAtIndex(idx), atIndex: 0)
}
}

arrays.removeRange(0..<numberToRemove)

由于您正在迭代一个在整个迭代过程中不断变化的数组,因此必须使用while循环,条件作为索引小于数组的大小,如下所示:

NSMutableArray *arrayContents = [NSMutableArray arrayWithObjects: @[@"abc", @"def"],@[@1,@2,@3], @[], nil];
NSLog( @"Pre while-loop: \n%@", arrayContents);
NSUInteger index = 0;
while (index < [arrayContents count]) {
    BOOL didRemove = false;
    if ([[arrayContents objectAtIndex: index] count] == 0) {
        [arrayContents removeObjectAtIndex: index];
        didRemove = true;

    }
    if (didRemove == false)
        index += 1;

}
NSLog( @"Post while-loop: \n%@", arrayContents);
如果没有删除任何内容,则会增加索引,但如果删除了某些内容,则不会增加索引。相反,在同一索引处再次循环,因为如果在删除后增加索引,将跳过迭代


希望这适用于您的情况:

您是否有一个数组,其单个元素也是一个数组?您使用的是objective-c还是swift?试着用这种方法解决你的问题。我用的是objective-c。你从哪里得到的?它似乎没有在数组中表示为数组。请用相关代码更新您的问题。为什么要创建arr数组?另外,如果一行中有两个空数组,则此代码将失败。你需要反向迭代。我的坏@rmaddy谢谢你指出它。使用for each loop如何?同样,我也会接受否决票,如果您能留下评论,说明您这样做的原因,我会更好地回答您的问题。正如rmaddy所做的那样,我改进了答案。您不能修改使用for in循环迭代的数组。不,在使用for in时在可变数组上调用removeObject:将导致崩溃。问题标记为Objective-C。答案应使用正确的语言。
NSMutableArray *arrayContents = [NSMutableArray arrayWithObjects: @[@"abc", @"def"],@[@1,@2,@3], @[], nil];
NSLog( @"Pre while-loop: \n%@", arrayContents);
NSUInteger index = 0;
while (index < [arrayContents count]) {
    BOOL didRemove = false;
    if ([[arrayContents objectAtIndex: index] count] == 0) {
        [arrayContents removeObjectAtIndex: index];
        didRemove = true;

    }
    if (didRemove == false)
        index += 1;

}
NSLog( @"Post while-loop: \n%@", arrayContents);