【问题标题】:obj c -get list of indexes in NSArray from NSPredicateobj c - 从 NSPredicate 获取 NSArray 中的索引列表
【发布时间】:2013-12-19 02:43:46
【问题描述】:

我有一个汽车数组,我正在根据包含字母 i 的对象对其进行过滤。

NSMutableArray *cars = [NSMutableArray arrayWithObjects:@"Maruthi",@"Hyundai", @"Ford", @"Benz", @"BMW",@"Toyota",nil];
NSString *stringToSearch = @"i";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",stringToSearch]; // if you need case sensitive search avoid '[c]' in the predicate
NSArray *results = [cars filteredArrayUsingPredicate:predicate];

results 包含Maruthi,Hyundai。而不是元素,我希望results 包含元素的索引,即0,1

【问题讨论】:

    标签: objective-c arrays search indexing nspredicate


    【解决方案1】:

    NSMutableArray *cars = [NSMutableArray arrayWithObjects:@"Maruthi",@"BMW", @"Ford", @"Benz", @"Hyundai",@"Toyota",nil]; NSMutableArray * 结果 = [[NSMutableArray alloc]init];

    for(int i = 0;i<cars.count;i++)
    {
        NSString * obj = [cars objectAtIndex:i];
        if([obj rangeOfString:@"i"].location == NSNotFound)
        {
            NSLog(@"Not Found");
        }
        else
        {
            int index = [cars indexOfObject:obj];
            [results addObject:[NSNumber numberWithInt:index]];
        }
    }
    

    【讨论】:

      【解决方案2】:

      为什么不使用

      - (NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate
      

      还是类似的?

      根据您的搜索条件,可能是这样的吗?

          NSArray *array = @[@"Maruthi",@"Hyundai", @"Ford", @"Benz", @"BMW", @"Toyota"];
          NSString *stringToSearch = @"i";
          NSIndexSet *set = [array indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
             NSString *string = obj;
             if (([string rangeOfString:stringToSearch].location == NSNotFound))
             {
                 return NO;
             }
             return YES;
          }];
      

      【讨论】:

      • 您可以根据我的问题举一个使用这种方法的例子吗?我无法弄清楚如何使用它。
      猜你喜欢
      • 1970-01-01
      • 2011-11-06
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多