objective-c NSArrays的array_key_exists()和array_search()等价物是什么?

时间:2011-12-02 17:06:16

标签: php objective-c cocoa

  1. 我在Obj-C中遇到这个错误,原因是程序试图访问不存在的NSArray密钥。
  2. 通常在我的PHP程序中,我使用array_key_exists(NEEDLE,HAYSTACK)验证密钥是否存在。
  3. 这两个函数在Cocoa / Obj-C中是否有等价物,如果没有,你会怎么做呢?
  4. 我对array_key_exists()的解决方案比对array_search()的解决方案更感兴趣。

5 个答案:

答案 0 :(得分:2)

在NSArray中,键只能是整数。因此,您只需检查您尝试访问的索引是否小于数组中的项目数。您可以通过计数方法检查项目数:

NSArray *array = ... some array ... 
NSUInteger index = ... some index ...

if (index < [array count]) {
     // It's safe to do [array objectAtIndex:index]
}

答案 1 :(得分:1)

PHP“数组”和Cocoa“数组”不是一回事。

在Cocoa中,“数组”是一个扁平的,有序的值集合。每个值在数组中的位置称为其索引。这与C“数组”的含义相同。

在PHP中,“数组”是一个关联数组,将键映射到值。另一个术语是 dictionary ,这就是Cocoa所称的:Cocoa的类就是NSDictionary。

所以你想要的是NSDictionary,而不是NSArray。

array_key_exists的对应方为objectForKey::如果字典中不存在该密钥,则objectForKey:会返回nil

array_search的对应方为allKeysForObject:

答案 2 :(得分:1)

在php中,array_key_exists用于“关联”数组或散列,或者Objective-C称它们为“Dictionaries”。所以你应该使用:

  

的NSDictionary   要么   的NSMutableDictionary

所以你可以这样做:

NSMutableDictionary *dItems = [NSMutableDictionary alloc] init] [[NSMutableDictionary alloc] init];
[dItems dItems: @"Key" forKey: @"Value"];
[dItems dItems: @"Key2" forKey: @"Value2"];
if ([dItems valueForKey: "Key"] != nil) {
 // exists
}

NSDictionary每次迭代数组都要高效得多,并且有很多

您可以查看的有价值的功能:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/Reference/Reference.html

答案 3 :(得分:0)

您应该查看NSArray Class Reference中的“查找数组中的对象”部分。

-indexOfObject:-indexOfObjectIdenticalTo:可能就是您要找的。

答案 4 :(得分:0)

你试过吗

- (BOOL)containsObject:(id)anObject

更多详情here