簡體   English   中英

如何通過字典鍵過濾字典數組

[英]How do I filter array of dictionaries by dictionary key

這是我的JSON,這是針對總共250個國家/地區的,我僅在下面列出了3個國家/地區。 在這里,我需要做的是,我已將各個國家/地區解析為基於大陸的七個不同陣列。

{
  "geonames" : [
    {
      "languages" : "ca",
      "east" : 1.786542777831983,
      "continent" : "EU",
      "geonameId" : 3041565,
      "population" : "84000",
      "areaInSqKm" : "468.0",
      "countryName" : "Andorra",
      "south" : 42.42849259876837,
      "countryCode" : "AD",
      "capital" : "Andorra la Vella",
      "isoAlpha3" : "AND",
      "fipsCode" : "AN",
      "isoNumeric" : "020",
      "west" : 1.407186714111276,
      "continentName" : "Europe",
      "north" : 42.65604389629997,
      "currencyCode" : "EUR"
    },
    {
      "languages" : "ar-AE,fa,en,hi,ur",
      "east" : 56.38166046142578,
      "continent" : "AS",
      "geonameId" : 290557,
      "population" : "4975593",
      "areaInSqKm" : "82880.0",
      "countryName" : "United Arab Emirates",
      "south" : 22.63332939147949,
      "countryCode" : "AE",
      "capital" : "Abu Dhabi",
      "isoAlpha3" : "ARE",
      "fipsCode" : "AE",
      "isoNumeric" : "784",
      "west" : 51.58332824707031,
      "continentName" : "Asia",
      "north" : 26.08415985107422,
      "currencyCode" : "AED"
    },
    {
      "languages" : "fa-AF,ps,uz-AF,tk",
      "east" : 74.879448,
      "continent" : "AS",
      "geonameId" : 1149361,
      "population" : "29121286",
      "areaInSqKm" : "647500.0",
      "countryName" : "Afghanistan",
      "south" : 29.377472,
      "countryCode" : "AF",
      "capital" : "Kabul",
      "isoAlpha3" : "AFG",
      "fipsCode" : "AF",
      "isoNumeric" : "004",
      "west" : 60.478443,
      "continentName" : "Asia",
      "north" : 38.483418,
      "currencyCode" : "AFN"
    }
  ]
}

這樣可以過濾geonames數組。 方法filterArrayByADictionary獲取一個數組和搜索條件,並返回過濾后的字典數組。

-(NSArray *)filterArrayByADictionary:(NSArray *)aArray andKey:(NSString *)aPredicte
{
    NSPredicate *filter = [NSPredicate predicateWithFormat:aPredicte];
    return [aArray filteredArrayUsingPredicate:filter];
}

您可以像這樣調用此方法。

NSArray *AsiaCounties =  [self filterArrayByADictionary: geonames andKey:@"continent = 'AS'"];
NSArray *EuropeCounties =  [self filterArrayByADictionary: geonames andKey:@"continent = 'EU'"];
// rest of the continents...

假設您已在NSDictionary獲得以下輸出:

NSDictionary *mainDic;

NSMutableArray *arr = [NSMutableArray new];
NSMutableArray *arrcontinent1 = [NSMutableArray new];
NSMutableArray *arrcontinent2 = [NSMutableArray new];

arr = [mainDic valueForKey:@"geonames"];

for(int i=0; i<[arr count];i++){
    NSDictionary *dic = [arr objectAtIndex:i];
    if([[dic valueForKey:@"continent"] isEqualToString:@"EU"]){
        [arrcontinent1 addObject:dic];
    }
    else if([[dic valueForKey:@"continent"] isEqualToString:@"AS"]){
        [arrcontinent2 addObject:dic];
    }
//        and so on......
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM