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

时间:2015-11-02 05:58:09

标签: objective-c nsmutablearray

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

这是我的阵列:

data(
(
abc,
xyz
),
(
yui,
hsjd
),
(
),
)

在数据数组中,最后一个数组为空,我想从数据数组中删除。请建议我任何想法。

3 个答案:

答案 0 :(得分:1)

注意: 而不是Downvoting,因为一个问题已被低估,所以这是一个公平的游戏,请先尝试阅读包含稳定和潜在不稳定方式的答案。 < / p>

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

data = [[NSMutableArray alloc] initWithArray: data];

现在删除空的封闭数组,如下所示:

(稳定之路)

NSMutableIndexSet *itemsToDiscard = [NSMutableIndexSet indexSet];
NSArray *item;
NSUInteger index = 0;

for (item in data) {
    if ([item count]<=0)
        [itemsToDiscard addIndex:index];
    index++;
}

[data removeObjectsAtIndexes:discardedItems];

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

潜在的不稳定方式

for(id arr in data) {
    if ([arr isKindOfClass:[NSArray class]])
    {
       if(arr.count<=0)
       { 
          [data removeObject:arr];
       }
    }
}

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

答案 1 :(得分:1)

由于您正在迭代整个迭代中正在变化的数组,因此您必须使用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);

如果没有删除任何内容,则会增加index,但如果删除了某些内容,则不会增加index。相反,你再次在同一个index循环,因为如果你在删除后增加索引,你就会跳过&#34;跳过&#34;迭代。

希望这适用于您的情况:)

答案 2 :(得分:-1)

简单的方法是循环遍历数组中的每个子数组,并检查它是否为空。由于您无法在循环时删除条目,因此您可以保留计数器并在之后将其删除。

在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)