阵列位置目标-c

时间:2011-09-27 19:36:35

标签: objective-c xcode ios4 nsarray

我有一个NSArray。可以说我里面有3个物体。 e.g

test (
        {
        Code = A;
        Comment = "None ";
        Core = Core;
},{
        Code = B;
        Comment = "None ";
        Core = Core;
},{
        Code = C;
        Comment = "None ";
        Core = Core;
})

我想搜索'Code'并返回数组索引。我怎样才能做到这一点?例如找到代码'b',我将返回'1'(因为它是数组中的第二个位置)。

3 个答案:

答案 0 :(得分:2)

离开我的头顶,所以可能会有一些错别字。我假设你的数组中的对象是字典:

for (NSDictionary dict in testArray)
{
    if ([[dict objectForKey:"Code"] isEqualToString:@"B"]
    {
        NSLog (@"Index of object is %@", [testArray indexOfObject:dict]);
    }
}

您也可以使用(可能更高效)

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

在块上传递@"Code == 'B'"的谓词。此方法将专门返回通过测试的对象的索引。

答案 1 :(得分:0)

如果定位到iOS 4.0或更高版本,则可以使用NSArray方法来执行此操作。

– indexOfObjectPassingTest:
– indexesOfObjectsPassingTest:
等。

NSArray *test = [NSArray arrayWithObjects:
                 [NSDictionary dictionaryWithObjectsAndKeys:@"A", @"Code", @"None", @"Comment", @"Core", @"Core", nil],
                 [NSDictionary dictionaryWithObjectsAndKeys:@"B", @"Code", @"None", @"Comment", @"Core", @"Core", nil],
                 [NSDictionary dictionaryWithObjectsAndKeys:@"C", @"Code", @"None", @"Comment", @"Core", @"Core", nil],
                 nil];
NSIndexSet *indexes =[test indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    return [[obj valueForKey:@"Code"] isEqualToString:@"B"];
}];

NSLog(@"Indexes with Code B: %@", indexes);

答案 2 :(得分:0)

在最简单的形式中,我会使用以下内容:

- (NSInteger)indexForText:(NSString*)text inArray:(NSArray*)array
{
  NSInteger index;
  [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    YourObject* o = (YourObject*)obj;
    if ([[o property] isEqualToString:text]) {
      index = idx;
      *stop = YES;
    }
  }];
  return index;
}