首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在NSSet或NSArray中搜索具有特定属性的特定值的对象?

如何在NSSet或NSArray中搜索具有特定属性的特定值的对象?
EN

Stack Overflow用户
提问于 2010-06-20 01:16:56
回答 3查看 35.8K关注 0票数 53

如何在NSSet或NSArray中搜索具有特定属性的特定值的对象?

例如:我有一个包含20个对象的NSSet,每个对象都有一个type属性。我想要获取第一个具有[theObject.type isEqualToString:@"standard"]的对象。

我记得在这类事情中使用谓词是可能的,对吧?

EN

回答 3

Stack Overflow用户

发布于 2010-06-21 05:19:07

正如Jason和Ole所描述的那样,您可以获得过滤后的数组,但由于您只需要一个对象,因此我将使用- indexOfObjectPassingTest: (如果它在数组中)或-objectPassingTest: (如果它在集合中),并避免创建第二个数组。

票数 17
EN

Stack Overflow用户

发布于 2013-08-16 22:25:22

通常,我使用indexOfObjectPassingTest:是因为我发现用Objective-C代码比用NSPredicate语法表达我的测试更方便。下面是一个简单的例子(假设integerValue实际上是一个属性):

代码语言:javascript
复制
NSArray *array = @[@0,@1,@2,@3];
NSUInteger indexOfTwo = [array indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    return ([(NSNumber *)obj integerValue] == 2);
}];
NSUInteger indexOfFour = [array indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    return ([(NSNumber *)obj integerValue] == 4);
}];
BOOL hasTwo = (indexOfTwo != NSNotFound);
BOOL hasFour = (indexOfFour != NSNotFound);
NSLog(@"hasTwo: %@ (index was %d)", hasTwo ? @"YES" : @"NO", indexOfTwo);
NSLog(@"hasFour: %@ (index was %d)", hasFour ? @"YES" : @"NO", indexOfFour);

此代码的输出为:

代码语言:javascript
复制
hasTwo: YES (index was 2)
hasFour: NO (index was 2147483647)
票数 15
EN

Stack Overflow用户

发布于 2010-06-20 01:23:42

代码语言:javascript
复制
NSArray* results = [theFullArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.type LIKE[cd] %@", @"standard"]];
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3076477

复制
相关文章

相似问题

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