2011-05-26 28 views
8

是否可以在NSArray中查找给定值是否存在于数组中(不使用for循环搜索它)?任何默认的随机方法。我经历了documentation,但没有发现太多相关。通过传递值查找NSArray的索引

请同时告诉我关于valueForKey方法(我无法从doc中获取)。

回答

10

containsObject:方法通常会给你什么你问 - 虽然它的名字听起来像你要查询特定实例(即两个对象具有相同的语义将不匹配)它实际上调用isEqual:上的对象,所以它正在测试

如果您希望项目的索引(如标题所示)使用indexOfObject:,它还会调用isEqual:来查找匹配项。

valueForKey:适用于有字典数组的情况;它会在每个字典中查找关键字并返回结果数组。

6

我相信你想使用indexOfObject方法。从the documentation

indexOfObject:

返回最低索引其 相应的数组值等于 给定的对象。

- (NSUInteger)indexOfObject:(id)anObject

参数

anObject

An object. 

返回值

最低索引,其相应的 阵列值等于吨anObject。如果 阵列中没有任何对象是 等于anObject,则返回NSNotFound

讨论

的对象被认为是相等的,如果 isEqual:返回YES

重要:如果anObjectnil的 异常。

+0

感谢您的最快准确的响应和编辑(+1为),但正如我所问,CRD也描述了valueForKey。 – rptwsthi 2011-05-26 05:34:13

0

使用NSPredicate来过滤NSArray基于NSDictionary

array = [dictionary filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(key == %@)", value]]; 

if([array count]>0) 
{ 
value exists; 
} 
4

您可以使用:

NSInteger idx = [myArray indexOfObject:obj]; 

找对象的索引。
并检查对象是有或没有在数组你可以使用:

- (BOOL)containsObject:(id)anObject 
0

结合objectAtIndexindexOfObject这样的:

[tmpArray objectAtIndex:[tmpArray indexOfObject:yourObject]];