如何根据项目内容从 NSArray 中删除项目
Posted
技术标签:
【中文标题】如何根据项目内容从 NSArray 中删除项目【英文标题】:How to remove item from NSArray depending on the items contents 【发布时间】:2013-12-02 21:17:52 【问题描述】:我正在创建一个由 NSStrings 组成的 NSArray,但是输入的其中一个数组是一组引号:
""
我想知道如何从我的数组中排除这些,我尝试使用谓词但它不起作用。
这是我的代码的样子:
NSString *tempSymbolsString = [tempAxesDictionary objectForKey:@"Symbols"];
NSArray *tempSymbolsArray = [tempSymbolsString componentsSeparatedByString:@";"];
tempSymbolsArray = [symbolsArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF != """""]];
NSLog(@"%@", tempSymbolsArray);
【问题讨论】:
【参考方案1】:其实比这还要简单。由于您的数组中只有字符串,因此创建一个可变副本并删除所有出现的""
。可能是这样的:
NSMutableArray *temp = [tempSymbolsArray mutableCopy];
[temp removeObject:@"\"\""];
这是有效的,因为removeObject:
将通过isEqual:
比较对象并删除任何匹配项。
【讨论】:
呃!这比我遍历数组的方法更容易。好电话。 好吧,所以也许我错了。出于某种原因,这就是我的阵列的样子。 1, 2, 3, 4, "" 我认为 "" 使我的 for 循环运行一到多次。但是您给我的代码没有删除“” 好吧,这行得通。我发现 commaseperatedbystring 有一个 ;最后.. 所以它没有在数组中添加任何内容,所以我只是将 -1 添加到我的计数中。 @HurkNburkS 听起来你有一个空字符串,而不是引用的空字符串。将代码更改为[temp removeObject:@""];
。【参考方案2】:
自己动手:
NSString *tempSymbolsString = tempAxesDictionary[@"Symbols"];
NSMutableArray *symbolsArray = [[tempSymbolsString componentsSeparatedByString:@";"] mutableCopy];
for (NSUInteger i = symbolsArray.count; i > 0; i--)
if ([symbolsArray[i - 1] isEqualToString:@"\"\""])
[symbolsArray removeObjectAtIndex:i - 1];
最后,symbolsArray
将包含除匹配 ""
之外的所有值。
顺便说一句 - 你原来的谓词可能需要一堆转义:
[NSPredicate predicateWithFormat:@"SELF != \"\\\"\\\"\""]
【讨论】:
以上是关于如何根据项目内容从 NSArray 中删除项目的主要内容,如果未能解决你的问题,请参考以下文章
Dart // Flutter:如何根据条目的内容从列表中删除项目