【问题标题】:Using NSPredicate to filter array of arrays使用 NSPredicate 过滤数组数组
【发布时间】:2013-06-18 04:03:17
【问题描述】:

我有以下情况:

NSArray(
    NSArray(
        string1,
        string2,
        string3,
        string4,
        string5,
    )
    ,
    NSArray(
        string6,
        string7,
        string8,
        string9,
        string10,
   )
)

现在我需要一个谓词来返回包含特定字符串的数组。 例如过滤包含 string9 的​​数组 -> 我应该取回整个第二个数组,因为我需要处理该数组中的其他字符串。有什么想法吗?

【问题讨论】:

  • 看看,如果有用或有任何问题请回复Here

标签: ios objective-c nsarray nspredicate


【解决方案1】:

据我所知,您不能将其用作单行,因此不要使用predicateWithFormat:,而应使用predicateWithBlock:

这样的事情应该做你想做的事

NSString *someString = @"Find me"; // The string you need to find.
NSArray *arrayWithArrayOfStrings = @[]; // Your array
[arrayWithArrayOfStrings filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSArray *evaluatedArray, NSDictionary *bindings) {
    return [evaluatedArray indexOfObject:someString] != NSNotFound;
 }]];

更新: Martin R 证明我错了:)

【讨论】:

    【解决方案2】:

    为了完整性:可以使用predicateWithFormat:

    NSArray *array = @[
        @[@"A", @"B", @"C"],
        @[@"D", @"E", @"F"],
    ];
    
    NSString *searchTerm = @"E";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF == %@", searchTerm];
    NSArray *filtered = [array filteredArrayUsingPredicate:predicate];
    NSLog(@"%@", filtered);
    

    输出:

    ( ( D, 乙, F ) )

    【讨论】:

    • +1,我正在使用 SUBQUERY [NSPredicate predicateWithFormat:@"SUBQUERY(SELF, $content, $content == [c] %@)",string] 解决这个问题,但这不起作用。有什么指点吗?
    • @Anupdas:你快到了,@"SUBQUERY(SELF, $content, $content == [c] %@).@count > 0" 工作。
    • @MartinR 太棒了,它有效。所以子查询的结果应该等同于一些,甚至形成谓词。谢谢:)
    • @Anupdas:没错,SUBQUERY 返回一个set,但谓词必须评估为真或假。
    • 是否可以只获取 E 作为嵌套数组的元素
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多