核心数据中的重复值

时间:2013-03-15 09:57:30

标签: ios objective-c core-data

我将类别和金额值存储到核心数据。我想向用户显示前5个类别。我能够得到结果但是如何对类似类别的金额求和并显示前5个。?< / p>

我已经尝试了一些逻辑来总结该类别的金额,但我被困在那里,我也想知道我是否做得对。

  NSArray *results = [moc executeFetchRequest:request error:&error];
for(int i = 0; i < [results count] ; i ++){
    double sum = 0;
    NSString *temp = [[results objectAtIndex:i]valueForKey:@"category"];
    for( int j = 0; j< [results count] ; j ++){
        if([temp isEqualToString:[[results objectAtIndex:j]valueForKey:@"category"]]){
            sum = sum + [[[results objectAtIndex:j]valueForKey:@"amount"]doubleValue];
        }
    }
NSLog(@"%f",sum);
NSLog(@"%f",temp);

    }
}

3 个答案:

答案 0 :(得分:0)

你想要的是一个计数集。继承文件:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCountedSet_Class/Reference/Reference.html 基本上,你只需输入你拥有的所有物品,然后再询问一个物体的数量。计数的集合将返回特定项目在集合中的次数。只需确保使用-countForObject而不是-count。 玩得开心

答案 1 :(得分:0)

您可以通过升序或降序将结果总和存储到数组中。从该数组中,您可以显示其指数中的前5个总和。

比你

答案 2 :(得分:0)

当您从核心数据中获取值时,您可以使用

验证重复值
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"amount=%d",previousValueotNot];

然后在下面添加此代码

    [request setPredicate:predicate];
NSError *error;
    NSArray *tempResults = [context executeFetchRequest:request error:&error];
    NSLog(@"temparray coun is %d",[tempResults count]);
if ([tempResults count] > 0)
    {

       //sum here the duplicates.
       //sample code is 


NSArray *tempResults = [self.managedObjectContext executeFetchRequest:request error:&error];
NSMutableArray *tempBudsArray = [[NSMutableArray alloc] init];
for ( Favorite *fav in tempResults) 
    {
      //.. Here u get the values from the core data and sum here  ,then store all the values, later u can put in ascending order
    }


 }