【问题标题】:How to remove item from NSArray depending on the items contents如何根据项目内容从 NSArray 中删除项目
【发布时间】: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);

【问题讨论】:

    标签: ios objective-c nsarray nspredicate


    【解决方案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 != \"\\\"\\\"\""]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      相关资源
      最近更新 更多