2016-03-03 2 views
0

У меня есть массив под названием inputArray Нравится это.Как отсортировать массив на основе значения ключа?

(
    { 
    "2016-01-21" =   { 
     amount = 3978; 
     date = "2016-01-20 18:30:00 +0000"; 
     "date-day" = 21; 
     "date-month" = Jan; 
     "date-year" = 16; 
     units = 780; 
    }; 
}, 
    { 
    "2015-11-20" =   { 
     amount = 7938; 
     date = "2015-11-19 18:30:00 +0000"; 
     "date-day" = 20; 
     "date-month" = Nov; 
     "date-year" = 15; 
     units = 1380; 
    }; 
}, 
    { 
    "2015-10-03" =   { 
     amount = 13423; 
     date = "2015-10-02 18:30:00 +0000"; 
     "date-day" = 03; 
     "date-month" = Oct; 
     "date-year" = 15; 
     units = 2211; 
    }; 
}, 
    { 
    "2015-09-26" =   { 
     amount = 4110; 
     date = "2015-09-25 18:30:00 +0000"; 
     "date-day" = 26; 
     "date-month" = Sep; 
     "date-year" = 15; 
     units = 800; 
    }; 
}, 
    { 
    "2015-08-03" =   { 
     amount = 18300; 
     date = "2015-08-02 18:30:00 +0000"; 
     "date-day" = 03; 
     "date-month" = Aug; 
     "date-year" = 15; 
     units = 2950; 
    }; 
}, 

) 

Из этого массива, я должен получить date-month с высоким amount.In в этом примере, индекс 5 содержит amount значение 18300 и месяц этого показателя Aug.

Как это сделать?

Также мне нужно сохранить это значение до NSString. Также мне нужно отсортировать этот массив на основе суммы. Значение и сохранить это в новом массиве.

+0

Не знаю, почему здесь добавлен дополнительный ключ даты. Было бы так легко, если этого ключа не было. – TheTiger

ответ

0

Предполагая, что значения, которые вы хотите словари и у вас есть массив из них, такие как:

NSDictionary *dict1 = @{ 
          @"date" : @"2016-01-21", 
          @"values" : @{ 
            @"amount" : @3978, 
            @"date" : @"2016-01-20 18:30:00 +0000", 
            @"date-day" : @21, 
            @"date-month" : @"Jan", 
            @"date-year" : @16, 
            @"units" : @780 
            } 

          }; 

    NSDictionary *dict2 = @{ 
          @"date" : @"2015-11-20", 
          @"values" : @{ 
            @"amount" : @7938, 
            @"date" : @"2015-11-19 18:30:00 +0000", 
            @"date-day" : @20, 
            @"date-month" : @"Nov", 
            @"date-year" : @15, 
            @"units" : @1380 
            } 

          }; 

    NSDictionary *dict3 = @{ 
          @"date" : @"2015-10-03", 
          @"values" : @{ 
            @"amount" : @13423, 
            @"date" : @"2015-10-02 18:30:00 +0000", 
            @"date-day" : @3, 
            @"date-month" : @"Oct", 
            @"date-year" : @15, 
            @"units" : @2211 
            } 

          }; 

    NSDictionary *dict4 = @{ 
          @"date" : @"2015-09-26", 
          @"values" : @{ 
            @"amount" : @4110, 
            @"date" : @"2015-09-25 18:30:00 +0000", 
            @"date-day" : @26, 
            @"date-month" : @"Sep", 
            @"date-year" : @15, 
            @"units" : @800 
            } 

          }; 

    NSDictionary *dict5 = @{ 
          @"date" : @"2015-08-03", 
          @"values" : @{ 
            @"amount" : @18300, 
            @"date" : @"2015-08-02 18:30:00 +0000", 
            @"date-day" : @3, 
            @"date-month" : @"Aug", 
            @"date-year" : @15, 
            @"units" : @2950 
            } 

          }; 

    NSArray *array = @[dict1, dict2, dict3, dict4, dict5]; 

Вы можете отсортировать массив с помощью компаратора:

NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *obj1, NSDictionary *obj2) { 
    NSNumber *amount1 = obj1[@"values"][@"amount"]; 
    NSNumber *amount2 = obj2[@"values"][@"amount"]; 

    // Sort in descending order so highest number is first 
    return [amount2 compare:amount1]; 
}]; 

Поскольку массив отсортированный по объему в порядке убывания, вы можете получить первый словарь из отсортированного массива и получить любое значение, которое вы хотите получить от этого

NSString *dateWithMax = sortedArray.firstObject[@"values"][@"date-month"]; 
NSLog(@"%@", dateWithMax); 
Смежные вопросы