如何在NSSet或NSArray中搜索具有特定属性的特定值的对象?
例如:我有一个包含20个对象的NSSet,每个对象都有一个type
属性。我想要获取第一个具有[theObject.type isEqualToString:@"standard"]
的对象。
我记得在这类事情中使用谓词是可能的,对吧?
发布于 2010-06-21 05:19:07
正如Jason和Ole所描述的那样,您可以获得过滤后的数组,但由于您只需要一个对象,因此我将使用- indexOfObjectPassingTest:
(如果它在数组中)或-objectPassingTest:
(如果它在集合中),并避免创建第二个数组。
发布于 2013-08-16 22:25:22
通常,我使用indexOfObjectPassingTest:
是因为我发现用Objective-C代码比用NSPredicate
语法表达我的测试更方便。下面是一个简单的例子(假设integerValue
实际上是一个属性):
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);
此代码的输出为:
hasTwo: YES (index was 2)
hasFour: NO (index was 2147483647)
发布于 2010-06-20 01:23:42
NSArray* results = [theFullArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.type LIKE[cd] %@", @"standard"]];
https://stackoverflow.com/questions/3076477
复制相似问题