我有一个阵列。在该数组中,我想检查数组是否为空,然后将其删除。我试图检查该数组是否为0或数为0但不起作用。
这是我的阵列:
data(
(
abc,
xyz
),
(
yui,
hsjd
),
(
),
)
在数据数组中,最后一个数组为空,我想从数据数组中删除。请建议我任何想法。
答案 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)