解决方案: 我已将@ BlackRider的答案标记为正确,因为它是最通用的,特别是对于复杂的比较,但还有其他非常好的答案和评论.我会鼓励任何有相同或类似问题的人对其进行审核,并针对您的具体情况评估最佳行动方案.
在我的情况下,我实际上并没有在我的实现中使用BlackRider的解决方案.在@ JoshCaswell的评论以及@ voromax的建议下indexesOfObjectsWithOptions:passingTest:,我选择使用我自己的解决方案(参见下面的编辑#2),因为在这种情况下我的比较非常简单.
感谢所有回答并提供见解的人.
我正在寻找一种有效的方法来从NSArray基于该对象的属性(在这种情况下是唯一标识符)中检索对象.在使用Linq的C#.NET中,我会做类似的事情
MyObject obj = myList.Single(o => o.uuid == myUUID);
Run Code Online (Sandbox Code Playgroud)
我也想知道是否有一种有效的方法来获得匹配非唯一属性的对象数组.再次,与Linq一样,它看起来像
List<MyObject> objs = myList.Where(o => o.flag == true).ToList();
Run Code Online (Sandbox Code Playgroud)
当然,我可以编写循环来执行此操作,但它们不可重用,我对它们的性能持怀疑态度.
查找具有唯一ID的对象:
-(MyObject*)findObjectWithUUID:(NSString*)searchUUID{
for (MyObject* obj in _myArray){
if([obj.uuid isEqualToString: searchUUID])
return obj;
}
}
Run Code Online (Sandbox Code Playgroud)
查找对象数组:
-(NSArray*)findObjectsWithFlag:(BOOL)f{
NSMutableArray* arr = [NSMutableArray array];
for (MyObject* obj in _myArray){
if(obj.flag == f)
[arr addObject:obj];
}
return arr;
}
Run Code Online (Sandbox Code Playgroud)
- 编辑 -
幸运的是,在第一种情况下,我正在寻找的对象有一个唯一的标识符,我知道只有一个.我想出了一个解决方案,在我的对象上实现isEqual,它将被调用indexOfObject:
- (BOOL)isEqual:(id)object{
return [self.uuid isEqualToString: ((MyObject*)object).uuid];
}
Run Code Online (Sandbox Code Playgroud)
然后创建一个"假的"查找对象,并使用它来查找真实的查找对象
MyObject *lookupObject …Run Code Online (Sandbox Code Playgroud)