首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用字符串值获取NSArray中对象的索引?

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

Stack Overflow用户
提问于 2012-02-04 07:15:56
回答 3查看 20.5K关注 0票数 22

我想要在类别的NSMutableArray中获得一个对象的索引。

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-04 07:25:19

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

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

如果无法做到这一点(因为category对象使用了不同的相等定义),请使用-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");
    }
票数 58
EN

Stack Overflow用户

发布于 2012-02-04 07:40:31

我不确定我是否理解了这个问题,但类似这样的东西可能会起作用(假设可变数组包含“Category”类的对象):

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

Stack Overflow用户

发布于 2012-02-04 21:30:23

尝试下面的代码要简单得多:

int f = [yourArray indexOfObject:@"yourString"];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9136785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档