我有一个 NSDictionaries 数组。如何取出字典中的第一个元素?
NSArray *messages = [[results objectForKey:@"messages"] valueForKey:@"message"];
for (NSDictionary *message in messages)
{
STObject *mySTObject = [[STObject alloc] init];
mySTObject.stID = [message valueForKey:@"id"];
stID = mySTObject.stID;
}
[更新为使用
firstObject
,如另一个答案中所述,其优点是为空数组返回 nil
。]
NSDictionary 中没有“第一个”元素;其成员没有秩序保证。如果您只想要字典中的one对象,但不关心它与哪个键关联,您可以这样做:
id val = yourDict.allValues.firstObject;
(还有
lastObject
,从 10.0(!) 就已经存在了。)
(旧的,10.6 版本之前:)
id val = nil;
NSArray *values = [yourDict allValues];
if ([values count] != 0)
val = [values objectAtIndex:0];
NSDictionaries 是无序的,这意味着没有第一个或最后一个元素。事实上,即使在特定字典的生命周期中,键的顺序也永远无法保证相同。
如果你想要任何物品,你可以获得其中一把钥匙:
id key = [[message allKeys] objectAtIndex:0]; // Assumes 'message' is not empty
id object = [message objectForKey:key];
NSArray 有一个名为
firstObject
的选择器,它简化了代码并使其更具可读性:
id val = [[yourDict allValues] firstObject];
如果
yourDict
为空,val
将为nil
,因此无需检查字典/数组大小。
最简单:
[[dict objectEnumerator] nextObject];
根据 Apple 的说法,调用
allKeys
或 allValues
会产生创建新数组的成本:
包含字典值的新数组,如果满足则为空数组 字典没有条目(只读)
因此,不产生此类成本的替代选项可能如下所示:
NSString* key = nil;
for(key in yourDict)
{ // this loop will not execute if the dictionary is empty
break; // exit loop as soon as we enter it (key will be set to some key)
}
id object = yourDict[key]; // get object associated with key. nil if key doesn't exist.
注意:如果字典为空,则 key 仍为 nil,返回的对象也将为 nil,因此我们不需要对字典实际为空的情况进行特殊处理。
如果有人仍在寻找此类情况的答案,可以参考以下内容:
// dict 是 NSDictionary
// [dict allKeys] 将给出 dict 中存在的所有键
// [[dict allKeys]objectAtIndex:0] 将从索引 0 处的所有键对象中给出,因为 [dict allKeys] 返回一个数组。
[[dict allKeys]objectAtIndex:0];
如果您有名为 message 的 NSDictionary, 非常简单:
message[[[message allKeys] objectAtIndex:0]];
但是您必须确保(或更好地检查)您的字典至少有一个元素。 检查方法如下:
if ([message allKeys] > 0) NSLog(@"%@", message[[[message allKeys] objectAtIndex:0]]);
但是 NSDictionary 没有保证顺序,因此只有当你的字典只有一个元素时,你可能才应该使用此代码。
[更新] 如果您需要获取字典的任何元素,使用它也是个好主意
试试这个:
NSDictionary *firstValue = [responseObject objectAtIndex:0];