1
for(id key in stats) {
    NSLog(@"key=%@ value=%@", key, [stats objectForKey:key]);
}

私は配列の辞書を持っています、そしてこれらの配列のそれぞれはそれ自体いくつかの配列を持っています。辞書にあるその多次元配列。

しかし、上記のコードは私に次のことを与えます

2012-11-30 21:36:07.203 key=main cat c value=(
"<Food: 0x6e5fb70>"
)
2012-11-30 21:36:07.205 key=main cat b value=(
"<Food: 0x6e5fa00>",
"<Food: 0x6e5faa0>"
)
2012-11-30 21:36:07.207 key=bakery_products value=(
"<Food: 0x6e5f510>",
"<Food: 0x6e5f660>",
"<Food: 0x6e5f700>",
"<Food: 0x6e5f810>",
"<Food: 0x6e5f900>",
"<Food: 0x6e5d5d0>"
)

Food 0x6e5fb70として表示されている配列の値にアクセスするにはどうすればよいですか?

私は文字通り何時間もそこにいて、解決策を見つけることができません。

4

3 に答える 3

3

おそらくこのようなもの:

for (id key in [stats allKeys]) {
    NSArray *foodArray = [stats objectForKey:key];
    for (Food *food in foodArray) {
        // do stuff with Food object
    }
}

更新(Plotoの2番目のコメント用):

これはどういう意味ですか:

NSArray *array = [stats objectForKey:@"bakery_products"];

更新#2 description

- (NSString *)description {
    return [NSString stringWithFormat:@"Food: %@, %@", whatever1, whatever2];
}
于 2012-11-30T21:42:49.540 に答える
0

@rmaddyが述べたことに加えて、AppleLLVMコンパイラ4.0+(xCode 4.4+に付属している)を使用する場合、リテラルを使用して、ボイラープレートコードをまったく使用せずに、必要なことを実行するための優れた方法があります。

これがあなたがそれをする方法です:

for (id key in [stats allKeys]) {
    for (Food * food in stats[key]) {

        //this is the object you're looking for
        NSLog(@"Object: %@", food);

    }
}

ここで、statsは、各キーの配列を持つ辞書オブジェクトです。LLVM 4.0にアップデートすることは、これだけの努力の価値があります:)

イテレータを使用して各配列を列挙することを選択した場合は、次のようにオブジェクトにアクセスすることもできます。

stats[key][i]

于 2012-11-30T22:19:16.347 に答える
0

辞書を列挙するもう少し効率的な方法

[stats enumerateKeysAndObjectsUsingBlock:^(NSString *category, NSArray *foodItems, BOOL *stop) {
  for (Food *food in foodItems) {
    // do something with food
  }
}];

明らかに、辞書を毎回同じ順序で繰り返す必要がある場合は、もう少し長いものを使用する必要があります

NSArray *sortedKeys = [[stats allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

for (id key in sortedKeys) {
  NSArray *foodArray = [stats objectForKey:key];
  for (Food *food in foodArray) {
    // do stuff with Food object
  }
}
于 2012-11-30T22:20:42.370 に答える