2013年9月12日木曜日

NSArray を使った NSDictionary でのソート

CoreData を使っているが、リレーションをしている状態でソートのかけ方が分からなかった。
とりあえず、CoreData については、今後のスキルアップにより方法が見つかるだろうと信じ、別の方法を取る事を考えてみた。
今回は、必要データだけを取り出してソートをかける方法が思いついたので、その方法を取ってみる。

この場合は、NSArray に NSDictionary 型のデータを格納し、NSSortDescriptor を使用する事により、
NSDictionary に格納しているデータをキーとして並び替えが行える事が分かったので実装してみた。

コードは以下の通り
    // 並び替えをするデータを用意
    NSArray *dataArray = [NSArray array];
    for(int i=0; i<5; i++) {
        
        NSDictionary *mdic = [NSDictionary dictionaryWithObjectsAndKeys:
                              [NSString stringWithFormat:@"%d",i], @"index",
                              10-i, @"count"
                              , nil];
        dataArray = [dataArray arrayByAddingObject:mdic];
    }
    
    NSSortDescriptor *sortDescCount;
    sortDescCount = [[NSSortDescriptor alloc]initWithKey:@"count" ascending:NO];

    NSArray *sortDescArray;
    sortDescArray = [NSArray arrayWithObjects:sortDescCount, nil];
    
    NSArray *sortArray;
    sortArray = [dataArray sortedArrayUsingDescriptors:sortDescArray];

    // 内容確認    
    for(NSDictionary *dic in sortArray) {
        NSLog(@"sort data count = %@, index = %@", [dic objectForKey:@"count"], [dic objectForKey:@"index"]);
    }

一応ログ出力で、問題ない事を確認した。
上記は、並び替えのキーが一つだが、複数キーも対応できる様だ。
処理の幅が広がるね。

0 件のコメント:

コメントを投稿