Objective c 所有相同密钥的总和
我不熟悉iOS 我有一个NSdictionary的NSMutableArray 我想做所有相同键的和, 这是我的代码,我试过了,但没有成功 ARQprofileDataArray此为NSMutableArray: 我想求康纳廷MF所有类别的和,以及康纳廷股权所有类别的和 我的代码:Objective c 所有相同密钥的总和,objective-c,nsmutablearray,Objective C,Nsmutablearray,我不熟悉iOS 我有一个NSdictionary的NSMutableArray 我想做所有相同键的和, 这是我的代码,我试过了,但没有成功 ARQprofileDataArray此为NSMutableArray: 我想求康纳廷MF所有类别的和,以及康纳廷股权所有类别的和 我的代码: NSNumber *sum = [ARQProfileDataArray valueForKeyPath:@"@sum.category"]; NSLog(@"sum---------- %@",sum);
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中的类别之和
如果您不想为每个键创建变量,那么您可以改为创建字典并在case中更新它。请找到一个简单而通用的解决方案
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;
}
谢谢你的帮助,我尝试了你的代码,但它在这一行崩溃了NSNumber*sum=[sumArray valueForKeyPath:@@sum.investment];请提供有效的答复。查看您的响应,它同时具有字符串和整数数据类型。投资额:6935.7,投资额:0,。你能试试我的密码吗?你会明白的。Thanx为了帮助我尝试了你的代码,我不想计算,我想添加值glad来帮助你。你可以随时修改它。这里的语法不正确`Switch dict[@category]`
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;
}