我有一个NSArray,如下所示
[{
"Id":"456",
"Type":"Dog",
"Sound":"Bark",
},
{
"Id":"789",
"Type":"Cat",
"Sound":"Meow",
}]
我尝试了以下
for (id key in array) { // Doesn't work
NSLog(@"%@", key[@"Type"]);
}
我试过
NSLog(@"%@", [array firstObject]); // Doesn't work
但这不起作用,因为没有ID可供访问。我得到两个NSInvalidArgumentException
。我如何成功遍历我拥有的两个对象并打印出类型?
答案 0 :(得分:1)
这有点令人困惑,因为你说:
I have an NSArray that looks like the following [{ "Id":"456", "Type":"Dog", "Sound":"Bark", }, { "Id":"789", "Type":"Cat", "Sound":"Meow", }]
但是,你也说:
NSLog(@“%@”,[array firstObject]); //不起作用
当然,你没有说明“不工作”是什么意思......是否会引发错误?它什么都没输出?它会输出一些东西,但不是你期望的东西吗?
但是,如果确实有一个“看起来像那个”的数组,那么让我们看看它实际上是什么......
我们可以将词典视为:
{ key1:value1, key2:value2, key3:value3, etc... }
我们可以将数组视为:
[object1, object2, object3, etc...]
因此,假设您的示例数据 结构与有效NSArray
中的结构相似,则表示您拥有一个包含2个Dictionary对象的数组。如果要将它们输出到控制台,可以执行以下操作:
// log the first object in the array
NSLog(@"%@", [array firstObject]);
,输出应为Dictionary:
{ Id = 456; Sound = Bark; Type = Dog; }
你也可以这样做:
// for each element (each Dictionary) in array, output the dictionary
for (NSDictionary *d in array) {
NSLog(@"%@", d);
}
导致:
...[1234:4321] { Id = 456; Sound = Bark; Type = Dog; } ...[1234:4321] { Id = 789; Sound = Meow; Type = Cat; }
,最后:
// for each element (each Dictionary) in array
for (NSDictionary *d in array) {
// for each Key in each Dictionary
for (NSString *key in [d allKeys]) {
NSLog(@"%@ - %@", key, d[key]);
}
}
会给你:
...[1234:4321] Sound - Bark ...[1234:4321] Id - 456 ...[1234:4321] Type - Dog ...[1234:4321] Sound - Meow ...[1234:4321] Id - 789 ...[1234:4321] Type - Cat
请注意,词典是*无序的,因此不要指望每次都以相同的顺序单步执行。
希望这是有道理的。当然,你还需要找出你认为自己有NSArray的原因。