Arrays 如何根据键对数组进行排序';s值多少?
我使用的数组名为Arrays 如何根据键对数组进行排序';s值多少?,arrays,dictionary,nssortdescriptor,Arrays,Dictionary,Nssortdescriptor,我使用的数组名为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; }; }, { "2
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;
};
},
)
从这个数组中,我必须获得金额最高的日期月
。在本例中,索引5包含金额
值18300
,以及该索引的月份Aug
如何做到这一点
我还需要将该值存储到
NSString
。我还需要根据金额值对该数组进行排序,并将其存储到新数组中。假设您需要的值是字典,并且您有一个字典数组,例如:
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);
我不知道为什么这里有额外的日期键,如果没有这个键就很容易了。