所有相同键的总和 iOS
sum of all same keys iOS
我是 iOS、
的新手
我有一个 NSMutableArray of NSdictionary,
我想对所有相同的键求和,
这是我试过但没有成功的代码
ARQProfileDataArray(这是 NSMutableArray):
{
"type":"arqEquity",
"category":"Equity",
"investment":"6935.7",
"percentage":"25.43"
},
{
"type":"liquid",
"category":"MF",
"investment":0,
"percentage":0
},
{
"type":"balanced",
"category":"MF",
"investment":"10215.87",
"percentage":"37.46"
},
{
"type":"equityMF",
"category":"MF",
"investment":"10123.41",
"percentage":"37.12"
}
我想要所有 category
的总和 MF
以及所有 category
的总和 Equity
我的代码:
NSNumber *sum = [ARQProfileDataArray valueForKeyPath:@"@sum.category"];
NSLog(@"sum---------- %@",sum);
我的代码在这一行崩溃了 NSNumber *sum = [ARQProfileDataArray valueForKeyPath:@"@sum.category"];
请帮忙看看我错在哪里?
提前致谢!!
使循环成为您的 NSMutableArray。请检查 Objective-C 的语法,它的时间很长 & 我没有检查
//Declare variable for category types
int mfCount = 0
int equityCount = 0
for dict in ARQProfileDataArray {
if ([dict[@"category"] isEqualToString:@"MF"]) {
mfCount += 1;
} else if ([dict[@"category"] isEqualToString:@"Equity"]) {
equityCount += 1;
}
}
现在您在 mfCount & equityCount
中有了类别总和。
如果您不想为每个键创建变量,那么您可以创建字典并在案例中更新它。
请找到一个简单通用的解决方案。
NSMutableArray *sumArray = [@[@{
@"type":@"arqEquity",
@"category":@"Equity",
@"investment":@6935.7,
@"percentage":@"25.43"
},
@{
@"type":@"liquid",
@"category":@"MF",
@"investment":@0,
@"percentage":@0
},
@{
@"type":@"balanced",
@"category":@"MF",
@"investment":@10215.87,
@"percentage":@"37.46"
},
@{
@"type":@"equityMF",
@"category":@"MF",
@"investment":@10123.41,
@"percentage":@"37.12"
}] mutableCopy];
// It will work for Number and Integer.
NSNumber *sum = [sumArray valueForKeyPath:@"@sum.investment"];
NSLog(@"Sum of Investment : %@", sum);
NSArray *categorys = [sumArray valueForKeyPath:@"@distinctUnionOfObjects.category"];
for (NSString* item in categorys)
{
NSArray *categoryArray = [self findSameValueKey:sumArray WithKey:@"category" WithValue:item];
NSLog(@"%@ count: %@", item,@([categoryArray count]));
}
// Helps to find same value key.
-(NSArray*)findSameValueKey:(NSArray*)dateArray WithKey:(NSString*)key WithValue:(NSString*)value{
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(NSDictionary *resultsDictionary, NSDictionary *bind){
if ([resultsDictionary objectForKey: key] && [[resultsDictionary objectForKey: key] isEqualToString:value]) {
return true;
}
return false;
}];
// Apply the predicate block .
NSArray *sameValueKeys = [dateArray filteredArrayUsingPredicate:predicate];
return sameValueKeys;
}
我是 iOS、
的新手我有一个 NSMutableArray of NSdictionary,
我想对所有相同的键求和, 这是我试过但没有成功的代码
ARQProfileDataArray(这是 NSMutableArray):
{
"type":"arqEquity",
"category":"Equity",
"investment":"6935.7",
"percentage":"25.43"
},
{
"type":"liquid",
"category":"MF",
"investment":0,
"percentage":0
},
{
"type":"balanced",
"category":"MF",
"investment":"10215.87",
"percentage":"37.46"
},
{
"type":"equityMF",
"category":"MF",
"investment":"10123.41",
"percentage":"37.12"
}
我想要所有 category
的总和 MF
以及所有 category
的总和 Equity
我的代码:
NSNumber *sum = [ARQProfileDataArray valueForKeyPath:@"@sum.category"];
NSLog(@"sum---------- %@",sum);
我的代码在这一行崩溃了 NSNumber *sum = [ARQProfileDataArray valueForKeyPath:@"@sum.category"];
请帮忙看看我错在哪里? 提前致谢!!
使循环成为您的 NSMutableArray。请检查 Objective-C 的语法,它的时间很长 & 我没有检查
//Declare variable for category types
int mfCount = 0
int equityCount = 0
for dict in ARQProfileDataArray {
if ([dict[@"category"] isEqualToString:@"MF"]) {
mfCount += 1;
} else if ([dict[@"category"] isEqualToString:@"Equity"]) {
equityCount += 1;
}
}
现在您在 mfCount & equityCount
中有了类别总和。
如果您不想为每个键创建变量,那么您可以创建字典并在案例中更新它。
请找到一个简单通用的解决方案。
NSMutableArray *sumArray = [@[@{
@"type":@"arqEquity",
@"category":@"Equity",
@"investment":@6935.7,
@"percentage":@"25.43"
},
@{
@"type":@"liquid",
@"category":@"MF",
@"investment":@0,
@"percentage":@0
},
@{
@"type":@"balanced",
@"category":@"MF",
@"investment":@10215.87,
@"percentage":@"37.46"
},
@{
@"type":@"equityMF",
@"category":@"MF",
@"investment":@10123.41,
@"percentage":@"37.12"
}] mutableCopy];
// It will work for Number and Integer.
NSNumber *sum = [sumArray valueForKeyPath:@"@sum.investment"];
NSLog(@"Sum of Investment : %@", sum);
NSArray *categorys = [sumArray valueForKeyPath:@"@distinctUnionOfObjects.category"];
for (NSString* item in categorys)
{
NSArray *categoryArray = [self findSameValueKey:sumArray WithKey:@"category" WithValue:item];
NSLog(@"%@ count: %@", item,@([categoryArray count]));
}
// Helps to find same value key.
-(NSArray*)findSameValueKey:(NSArray*)dateArray WithKey:(NSString*)key WithValue:(NSString*)value{
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(NSDictionary *resultsDictionary, NSDictionary *bind){
if ([resultsDictionary objectForKey: key] && [[resultsDictionary objectForKey: key] isEqualToString:value]) {
return true;
}
return false;
}];
// Apply the predicate block .
NSArray *sameValueKeys = [dateArray filteredArrayUsingPredicate:predicate];
return sameValueKeys;
}