按字典值返回对象的索引

时间:2009-11-23 15:32:49

标签: objective-c

这是我的情景: 我有一个包含2个值的字典项数组。

array = (
    {
        id = 1;
        title = "Salon One";
    },
    {
        id = 2;
        title = "Salon Two";
    }
)

我甚至不确定这是否可行,但是我可以将此数组传递给函数并根据字典值返回对象索引吗?

- (int)getObjectIndex:(NSMutableArray *)array byName:(NSString *)theName{
    int index;

    /* Pseudo Code*/
    /*index = the index value in 'array' of objectForKey:@"title" = theName*/

    return index;
}

3 个答案:

答案 0 :(得分:10)

如果你想用雪豹中引入的块超级想象,你可以这样做:

- (BOOL (^)(id obj, NSUInteger idx, BOOL *stop))blockTestingForTitle:(NSString*)theName {
    return [[^(id obj, NSUInteger idx, BOOL *stop) {
        if ([[obj objectForKey:@"title"] isEqualToString:theName]) {
            *stop = YES;
            return YES;
        }
        return NO;
    } copy] autorelease];
}

然后每当你想在数组中找到字典的索引时:

[array indexOfObjectPassingTest:[self blockTestingForTitle:@"Salon One"]]

答案 1 :(得分:6)

为什么不呢?

- (NSInteger)getObjectIndex:(NSMutableArray *)array byName:(NSString *)theName {
    NSInteger idx = 0;
    for (NSDictionary* dict in array) {
        if ([[dict objectForKey:@"title"] isEqualToString:theName])
            return idx;
        ++idx;
    }
    return NSNotFound;
}

请注意签名略有不同(返回类型NSIntegerint)。在64位环境中使用NSNotFound时,这是必需的。

答案 2 :(得分:0)

当然有可能,只需循环遍历数组,直到找到你正在寻找的东西