2

これは私が持っている NSDictionary です:

locations: {
    509f3a914d026b589ba3a090 =     {
        coordinates =         {
            latitude = "29.76429";
            longitude = "-95.3837";
        };
        country = USA;
        id = 509f3a914d026b589ba3a090;
        name = Houston;
        state = Texas;
    };
    509f3b3a4d026b589ba3a091 =     {
        coordinates =         {
            latitude = "3.138722";
            longitude = "101.686849";
        };
        country = Malaysia;
        id = 509f3b3a4d026b589ba3a091;
        name = "Kuala Lumpur";
    };
    509f475b4d026b589ba3a093 =     {
        coordinates =         {
            latitude = "32.803468";
            longitude = "-96.769879";
        };
        country = USA;
        id = 509f475b4d026b589ba3a093;
        name = Dallas;
        state = Texas;
    };
}

私がやりたいことは、国を取得することです。ご覧のとおり、「USA」には 2 つの値があります。アメリカとマレーシアを推定したいだけです。アメリカ、マレーシア、アメリカではありません。

私が理にかなっていることを願っています

4

3 に答える 3

4

最も簡単な方法は次のとおりだと思います。

[NSSet setWithArray:[[dictionary allValues] valueForKey:@"country"]];

だからあなた:

  1. トップレベルディクショナリのすべての値の配列を取得します。
  2. valueForKey:その配列を呼び出す—配列内のすべてを順番に呼び出してから、回答の配列を返すように定義されていvalueForKey:ます。辞書では、問題のキーに「@」が付いていない場合valueForKey:と同じです。objectForKey:
  3. 結果の配列からセットを作成し、繰り返しを解決します。

allObjects最終的に配列が必要な場合は、結果のセットにへの呼び出しを追加できます。

于 2012-11-12T03:20:21.620 に答える
1

私はこのようにします:

NSMutableArray *newArray = [NSMutableArray array];
NSMutableSet *currentCountries = [NSMutableSet set];
for(NSDictionary* dic in [[currentDict objectForKey:@"locations"] allValues])
{
    if(![currentCountries containsObject:[dic objectForKey:@"country"])
    {
        [currentCountries addObject:[dic objectForKey:@"country"]]
        [newArray addObject:dic];
    }
}
于 2012-11-12T03:19:35.237 に答える
1

locationという辞書があり、辞書内のオブジェクトの1つが国であるとします。また、あなたはただ外挿すると言います私はあなたがそれをいくつかの配列か何かに追加したいと思うでしょう。この問題については、セットを使用して、同じ国に2回以上入国しないようにすることができます。

NSMutableSet *set = [NSMutableSet set];
NSMutableArray *array = [NSMutableArray array];

NSString *country = [locations objectForKey:@"country"]; 
if ([set containsObject:country])
{
    [array addObject:country]; // Extrapolating country from dictionary to array
    [set addObject:country]; // Addind it to set to check later
}
于 2012-11-12T03:15:27.340 に答える