如何获得NSDictionary中的第一个元素?

时间:2010-04-22 22:42:46

标签: iphone objective-c cocoa cocoa-touch nsdictionary

我有一系列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;
    }

8 个答案:

答案 0 :(得分:60)

NSDictionary中没有“first”元素;其成员没有保证订单。如果您只想从字典中获取一个对象,但不关心与之关联的哪个键,则可以执行以下操作:

id val = nil;
NSArray *values = [yourDict allValues];

if ([values count] != 0)
    val = [values objectAtIndex:0];

答案 1 :(得分:25)

NSDictionaries是无序的,这意味着没有第一个或最后一个元素。实际上,即使在特定字典的生命周期内,密钥的顺序也永远不会保证是相同的。

如果您想要任何对象,可以获得其中一个键:

id key = [[message allKeys] objectAtIndex:0]; // Assumes 'message' is not empty
id object = [message objectForKey:key];

答案 2 :(得分:5)

NSArray有一个名为firstObject的选择器,它简化了代码并使其更具可读性:

id val = [[yourDict allValues] firstObject];

如果yourDict为空val将为nil,则无需检查字典/数组大小。

答案 3 :(得分:2)

最简单的:

[[dict objectEnumerator] nextObject];

答案 4 :(得分:1)

根据Apple,对allKeysallValues的调用会产生创建新数组的费用:

  

包含字典值的新数组,或者是否为空数组   字典没有条目(只读)

因此,不会产生此类成本的替代选择可能如下所示:

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.

注意:如果字典为空,则密钥将保持为零,并且返回的对象也将为零,因此我们不需要对字典实际为空的情况进行特殊处理。

答案 5 :(得分:1)

如果有人仍然在寻找这种情况的答案,那么可以参考:

// dict是NSDictionary

// [dict allKeys]将提供dict中的所有键

// [[dict allKeys] objectAtIndex:0]将从索引0处的所有键对象中提供,因为[dict allKeys]返回一个数组。

[[dict allKeys]objectAtIndex:0];

答案 6 :(得分:0)

如果 NSDictionary 命名为消息, 这很简单:

message[[[message allKeys] objectAtIndex:0]];

但你必须确保(或更好地检查)你的词典至少有一个元素。 以下是检查方法:

if ([message allKeys] > 0) NSLog(@"%@", message[[[message allKeys] objectAtIndex:0]]);

但是NSDictionary没有保证顺序,所以只有当你的字典只有一个元素时,你才应该使用这个代码。

[UPDATE] 如果你需要获得字典的任何元素

,那么使用它也是个好主意

答案 7 :(得分:-2)

试试这个:

NSDictionary *firstValue = [responseObject objectAtIndex:0];