我有一系列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;
}
答案 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,对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.
注意:如果字典为空,则密钥将保持为零,并且返回的对象也将为零,因此我们不需要对字典实际为空的情况进行特殊处理。
答案 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];