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


What are the array_key_exists() and array_search() equivalents for objective-c NSArrays?

  1. 我在Obj-C中有这个错误,这是因为程序试图访问一个不存在的NSArray密钥
  2. 通常在我的PHP程序中,我会在使用array_key_exists(NEEDLE,HAYSTACK(之前验证密钥是否存在
  3. 这两个函数在Cocoa/Oj-C中是否有等价物?如果没有,你将如何创建它们
  4. 我对array_key_exists((的解决方案比对array_search((更感兴趣

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

NSArray *array = ... some array ... 
NSUInteger index = ... some index ...
if (index < [array count]) {
     // It's safe to do [array objectAtIndex:index]
}

PHP"arrays"和Cocoa"arrays"不是一回事。

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

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

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

array_key_exists的对应项是objectForKey::如果字典中不存在密钥,则objectForKey:返回nil

array_search相对应的是allKeysForObject:

在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

您可能应该查看NSArray类引用的"在数组中查找对象"部分。

-indexOfObject:-indexOfObjectIdenticalTo:可能是您想要的。

你试过吗

- (BOOL)containsObject:(id)anObject

更多详细信息,请点击此处