【问题标题】:Find index of array object in array object在数组对象中查找数组对象的索引
【发布时间】:2012-04-08 17:32:16
【问题描述】:

作为一个例子,如果我有这个数组:

_mode = [NSArray arrayWithObjects:
                      [NSArray arrayWithObjects:@"1", @"One", nil],
                      [NSArray arrayWithObjects:@"2", @"Two", nil],
                      [NSArray arrayWithObjects:@"3", @"Three", nil],
                      [NSArray arrayWithObjects:@"4", @"Four", nil],
                      [NSArray arrayWithObjects:@"5", @"Five", nil],
                      nil];

我需要找到数组 _mode 的哪个对象包含 @"3" 我该怎么做? 我试过selectedIndex = [_mode indexOfObject:@"3"];selectedIndex = [[_mode objectAtIndex:0] indexOfObject:@"sta"];,但都不管用。

【问题讨论】:

    标签: objective-c xcode cocoa-touch nsarray


    【解决方案1】:
    [_mode indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop){
        return [[obj objectAtIndex:0] isEqualToString:@"3"];
    }];
    

    【讨论】:

    • 除非您知道要查找的对象始终位于索引 0 处,否则此方法将需要在块内额外的 for 循环
    • 不错的解决方案。但请注意:适用于 iOS 4.0、Mac OS X v10.6 及更高版本。
    • @nacho4d,如果目标不一定在索引0,只需使用[obj containsObject:@"3"]
    • 当然是循环了。你必须以某种方式检查元素。关键是如果可以避免,不要自己编写该循环。代码将更易读、更紧凑、更不容易出错。
    • 对象始终位于子数组的索引 0 处。这很完美。谢谢。
    【解决方案2】:

    这与 Jonas Schnelli 的回答基本相同 :)

    for (NSArray *subarray in _mode){
        NSInteger index = [subarray indexOfObject:@"3"];
        if (index != NSNotFound) return subarray;
    }
    

    【讨论】:

      【解决方案3】:

      喜欢这样吗?

      for(NSArray *subarray in _mode) {
        for(NSString *str in subarray) {
         if([str isEqualToString:@"3"]) {
           return subarray; // returns the array within _mode that contains "3"
         }
        }
      }
      

      如果你需要索引:

      for(NSArray *subarray in _mode) {
        for(NSString *str in subarray) {
         if([str isEqualToString:@"3"]) {
           return [mode indexOfObject:subarray];
         }
        }
      }
      

      【讨论】:

        【解决方案4】:

        这给出了数组中字典的索引。

        for (NSDictionary *dict in self.yourArray ) {
            if ([anotherArray containsObject:[dict valueForKey:@"Key"]]) {
                NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[self.yourArray indexOfObject:dict] inSection:section];
                NSLog(@"IndexPath is %@",indexPath);
            }    
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-24
          • 1970-01-01
          • 2017-02-21
          • 1970-01-01
          • 2019-05-28
          相关资源
          最近更新 更多