繁体   English   中英

如何使用字符串值获取NSArray中对象的索引?

[英]How do I get the index of an object in an NSArray using string value?

我想获取NSMutableArray类别中对象的索引。

category对象有一个属性“category_title”,我希望能够通过传递category_title的值来获取索引。

我查看了文档,找不到一个简单的方法来解决这个问题。

NSArray不保证您只能存储给定对象的一个​​副本,因此您必须确保自己处理(或使用NSOrderedSet )。

也就是说,这里有几种方法。 如果你的类别对象实现isEqual:匹配category_title,那么你可以使用-indexOfObject: .

如果你不能这样做(因为类别对象使用不同的相等定义),请使用-indexOfObjectPassingTest: . 它需要一个块,您可以在其中执行任何您想要定义“测试”的测试 - 在这种情况下,测试category_title字符串相等性。

请注意,这些都是为NSArray声明的,因此如果您只查看NSMutableArray标头/文档,则不会看到它们。

编辑:代码示例。 这假设类CASCategory对象具有NSString属性categoryTitle (我不能让自己在ivar名称中放置下划线:-):

    CASCategory *cat1 = [[CASCategory alloc] init];
    [cat1 setCategoryTitle:@"foo"];
    CASCategory *cat2 = [[CASCategory alloc] init];
    [cat2 setCategoryTitle:@"bar"];
    CASCategory *cat3 = [[CASCategory alloc] init];
    [cat3 setCategoryTitle:@"baz"];

    NSMutableArray *array = [NSMutableArray arrayWithObjects:cat1, cat2, cat3, nil];
    [cat1 release];
    [cat2 release];
    [cat3 release];

    NSUInteger barIndex = [array indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
        if ([[(CASCategory *)obj categoryTitle] isEqualToString:@"bar"]) {
            *stop = YES;
            return YES;
        }
        return NO;
    }];

    if (barIndex != NSNotFound) {
        NSLog(@"The title of category at index %lu is %@", barIndex, [[array objectAtIndex:barIndex] categoryTitle]);
    }
    else {
        NSLog(@"Not found");
    }

不确定我是否理解这个问题,但是这样的事情可能会起作用(假设Mutable数组包含Class“Category”的对象):

int indx;
bool chk;
for (Category *aCategory in theArray) 
{
    chk = ([[aCategory category_title] isEqualToString:@"valOfCategoryTitle"])
    if ( chk )
        indx = [theArray indexOfObject:aCategory];
}

尝试这个代码要简单得多: -

int f = [yourArray indexOfObject:@"yourString"];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM