gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 08:00:27 25 4
gpt4 key购买 nike

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

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

我已经查看了文档,但找不到解决此问题的简单方法。

最佳答案

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

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

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

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

编辑:代码示例。这假定类 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");
}

关于iphone - 如何使用字符串值获取 NSArray 中对象的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9136785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com