如何根据项目内容从 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 中删除项目的主要内容,如果未能解决你的问题,请参考以下文章

iOS:查找要从服务器中删除的项目的 NSArray

Dart // Flutter:如何根据条目的内容从列表中删除项目

NSArray,如何根据属性的值获取项目[重复]

将项目从 NSArray 传输到 NSManagedObject 的 NSSet

如何根据用户输入从 SQL 表中删除项目?

如何根据多个条件并使用 linq 从通用列表中删除项目