如何根据其值对plist进行排序

时间:2012-12-26 11:24:01

标签: iphone ios plist sorting

我的列表包含列表和列表列表(item0,item1,item2)。我在图表中填充此plist ..工作正常。在Plist key (date)-> Value(i store by using NSDate)中。现在我需要对Plist进行排序以这种方式: - graph只能显示一周。 假设第一个值为26-Dec-12,而不是仅显示1-Jan-13(1周)值plist应显示

first

代码

- (NSArray *)readFromPlist
{
// get paths from root direcory
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                             NSUserDomainMask, YES); 
NSString *documentsDirectory = [documentPaths objectAtIndex:0];
NSString *documentPlistPath = [documentsDirectory stringByAppendingPathComponent:@"calori.plist"];

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:documentPlistPath];

valueArray = [dict objectForKey:@"title"];

  return valueArray;
}

- (void)drawRect:(CGRect)rect {
// Drawing code


    CGContextRef _context = UIGraphicsGetCurrentContext();
ECGraph *graph = [[ECGraph alloc] initWithFrame:CGRectMake(10,10, 480, 320) 
                                    withContext:_context isPortrait:NO];

NSMutableArray *Array=[NSMutableArray arrayWithArray:[self readFromPlist]];


NSMutableArray *items = [[NSMutableArray alloc] init];

for (id object in [Array reverseObjectEnumerator]){

    if ([object isKindOfClass:[NSDictionary class]])
    {
        NSDictionary *objDict = (NSDictionary *)object;


           tempItemi  =[[ECGraphItem alloc]init];

        NSString *str=[objDict objectForKey:@"title"];
        NSLog(@"str value%@",str);
        float f=[str floatValue];


        NSString*str1=[objDict objectForKey:@"date"];

        NSLog(@" str values2-- %@",str1);

        tempItemi.isPercentage=YES;
        tempItemi.yValue=f;

        tempItemi.name=str1;



         [items addObject: tempItemi];



    }
}

[graph drawHistogramWithItems:items lineWidth:2 color:[UIColor blackColor]];
}

3 个答案:

答案 0 :(得分:1)

你试过NSSortDescriptor吗?

NSSortDescriptor *sortDesc = [[NSSortDescriptor alloc] initWithKey:@"DATE" ascending:YES selector:@selector(compare:)];
[yourDictionary sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]];

答案 1 :(得分:1)

试试这个

NSString *path = [[NSBundle mainBundle] pathForResource:@"yourfile" ofType:@"plist"];
    NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
    // sort it
    NSArray *sortedArray = [[myDict allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
    // iterate and print results
    for(NSString *key in sortedArray) {
        NSLog(@"key=%@,value=%@", key, [dict objectForKey:key]);
    }

答案 2 :(得分:1)

由于您的要求是在7天内过滤日期,

我给你一个逻辑,试试这个:

- (NSArray *)readFromPlistForOneWeek {

    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
    NSString *documentsDirectory = [documentPaths objectAtIndex:0];
    NSString *documentPlistPath = [documentsDirectory stringByAppendingPathComponent:@"calori.plist"];


    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:documentPlistPath];

    //loop through each of the item
    //and check if <8 then add that keyValue to array
    NSMutableArray *tempValueArray=[NSMutableArray new];
    for (NSDictionary *subDict in [dict objectForKey:@"title"]) {
       // NSLog(@"=> %@",subDict);

        NSString *plistDateString=[subDict objectForKey:@"date"];
        NSDate *currentDate = [NSDate date];

        NSDateFormatter *dateFormatter=[NSDateFormatter new];
        [dateFormatter setDateFormat:@"dd-MMM-yy"];

        NSDate *plistDate=[dateFormatter dateFromString:plistDateString];

        NSString *currentDateString=[dateFormatter stringFromDate:currentDate];

        NSTimeInterval secondsBetween = [plistDate timeIntervalSinceDate:currentDate];
        NSInteger dateDiff = secondsBetween / 86400;

        if( dateDiff<8 ){ //within 0-7 days
            [tempValueArray addObject:subDict];
        }
    }

    NSLog(@"valuArray : %@",tempValueArray);

    return tempValueArray;
}