1

可変配列を日付でソートしたい。私の配列には、key1、key2、birthdayなどのキーを持ついくつかのdictが含まれています。次に、誕生日キーで並べ替える必要があります。これは、次を使用して実行できることがわかっています。

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"birthday" ascending:YES]; 
[myArray sortUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];

しかし、私の問題は、空の誕生日フィールドを含まない配列のみを並べ替えたいということです。私の配列には、いくつかの空の誕生日フィールドが含まれます。私はそれらを分類したくありません。最後に、これらをテーブルビューにロードする必要があります[self.mTable reloadData];

4

2 に答える 2

2

まず、誕生日のないすべてのオブジェクトのインデックスを収集します。

NSIndexSet *indexSet = [NSIndexSet indexSet];
[array enumerateObjectsUsingBlock:^(NSDictionary *dict, NSUInteger idx, BOOL *stop)
{
    if(![[dict allKeys] containsObject:@"birthday"]){
        [indexSet addIndex:idx];
    }
}];

元の配列からそれらを削除します

[array removeObjectsAtIndexes:indexSet];

比較ブロックを使用すると、並べ替えは次のようになります

[array sortUsingComparator: ^(NSDictionary *d1, NSDictionary *d2) {    
    NSDate *date1 = [d1 objectForKey:@"birthday"];
    NSDate *date2 = [d2 objectForKey:@"birthday"];

    return [date1 compare:date2]
}
于 2012-06-14T07:29:24.713 に答える
0

次のように、テーブル ビューをサポートする別の配列を作成します。

NSDictionary* obj1 = [NSDictionary dictionaryWithObject: [NSDate date] forKey: @"birthday"];
NSDictionary* obj2 = [NSDictionary dictionaryWithObject: [NSDate dateWithTimeIntervalSince1970: 0] forKey: @"birthday"];
NSDictionary* obj3 = [NSDictionary dictionaryWithObject: @"wow" forKey: @"no_birthday"];

NSArray* all = [NSArray arrayWithObjects: obj1, obj2, obj3, nil];
NSArray* onlyWithBirthday = [all valueForKeyPath: @"@unionOfObjects.birthday"];

テーブル ビューの完全なオブジェクトが必要な場合は、次のコードに進みます。

NSPredicate* filter = [NSPredicate predicateWithFormat: @"SELF.birthday IN %@", onlyWithBirthday];
NSArray* datasource = [all filteredArrayUsingPredicate: filter];

次に、選択した並べ替え方法を適用できます。

于 2012-06-14T08:52:08.107 に答える