Ios 根据条件从数组中获取对象
在我的应用程序中,我有如下实体类:Ios 根据条件从数组中获取对象,ios,nsmutablearray,contains,Ios,Nsmutablearray,Contains,在我的应用程序中,我有如下实体类: #import <Foundation/Foundation.h> @interface classAbc : NSObject { NSString *strTitle; int iId; } @property(nonatomic, retain) NSString *strTitle; @property(nonatomic) int iId; @end classAbc *objAbc=[[classAbc al
#import <Foundation/Foundation.h>
@interface classAbc : NSObject
{
NSString *strTitle;
int iId;
}
@property(nonatomic, retain) NSString *strTitle;
@property(nonatomic) int iId;
@end
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条件从这个数组中检索对象,如下所示:
例如,如果arrTemp包含iId值为2的对象
除了循环迭代之外,有谁能提出其他方法吗?随着循环对象数量的增加,查找循环将花费大量时间
提前感谢。我建议您使用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]];
注意:将id从int类型更改为NSNumber类型,以便您可以将其存储为键您可以使用predicate拒绝Filteredarray:但老实说,这可能只是在后台执行快速枚举 确保“for循环”实际上是一个快速枚举循环,而不是将数组计数用作循环整数:
for (classAbc* obj in arrTemp)
{
// check for your match
break; // if found
}
如果这确实会给您带来可衡量的性能问题,请尝试更复杂的方法 搜索之后,我得到了这个问题的答案。对于这种情况,使用NSPredicate是最好的方法。使用NSPredicate,我们可以对类对象的任何成员应用条件 这是MAC OS X的链接,但在iPhone sdk上可以使用,但需要做一些更改。
使用predicateWithBlock:获取特定属性的对象。
- (NSPredicate*)谓词WithBlock:(BOOL(^)(id evaluatedObject,NSDictionary*绑定))块
isEqual
和hash
方法。我不想比较两个对象,我想根据该对象任何成员的条件找到一个对象。你能为你所说的“该对象任何成员的条件”伪编码一个示例吗?jrturton,是的,我知道这一点。这是我最后的选择,如果我没有得到任何其他更快迭代的解决方案。