在我的应用程序中,我有实体类,如:
#import <Foundation/Foundation.h>
@interface classAbc : NSObject
{
NSString *strTitle;
int iId;
}
@property(nonatomic, retain) NSString *strTitle;
@property(nonatomic) int iId;
@end
在我的NSMutableArray中我存储了这个类的对象,如:
classAbc *objAbc=[[classAbc alloc] init];
objAbc.iId=1;
objAbc.strTitle=@"Title 1";
classAbc *objAbc1=[[classAbc alloc] init];
objAbc1.iId=2;
objAbc1.strTitle=@"Title 2";
NSMutableArray *arrTemp=[[NSMutableArray alloc] initWithObjects:objAbc,objAbc1,nil];
[objAbc release];
[objAbc1 release];
现在运行时我想根据objAbc.iId条件从这个数组中检索Object,如:
如果arrTemp包含的对象的iId值为2,例如。
除了循环迭代之外,任何人都可以建议吗?由于数字对象可以增加循环,因此需要花费大量时间才能找到它。
提前致谢。
答案 0 :(得分:1)
我建议您使用NSMutableDictionary存储您的对象,其中键是对象的id,值是对象本身。如果你不介意订单使用这种方法。
classAbc *objAbc=[[classAbc alloc] init];
objAbc.iId=1;
objAbc.strTitle=@"Title 1";
classAbc *objAbc1=[[classAbc alloc] init];
objAbc1.iId1=2;
objAbc1.strTitle1=@"Title 2";
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:objAbc1 forKey:objAbc1.iId1];
.
.
.
classAbc *abc = (classAbc*)[dict objectForKey:[NSNumber numberWithInt:2]];
注意:将类型从int更改为类型NSNumber,以便将其存储为键
答案 1 :(得分:1)
使用predicateWithBlock:获取特定属性的对象。 NSPredicate Link
答案 2 :(得分:0)
你可以解决filterArrayUsingPredicate:但说实话,这可能只是在后台进行快速枚举。
确保“for循环”实际上是一个快速枚举循环,而不是将数组的计数用作循环整数:
for (classAbc* obj in arrTemp)
{
// check for your match
break; // if found
}
如果这实际上会给您带来可衡量的性能问题,那么只能尝试更复杂的东西。
答案 3 :(得分:0)
搜索后,我得到了这个问题的答案。使用NSPredicate是这种情况的最佳方式。使用NSPredicate,我们可以对类对象的任何成员应用条件。
这是MAC OS X的链接,但这适用于iPhone sdk并进行了一些更改。 NSPredicate