4

私はこのようなNSMutableArrayを持っています:

(
        {
        City = "Orlando";
       Name = "Shoreline Dental";
        State = Florida;
    },
        {
        City = "Alabaster ";
        Name = Oxford Multispeciality;
        State = Alabama;
    },
        {
        City = Dallas;
        Name = "Williams Spa";
        State = Texas;
    },
        {
        City = "Orlando ";
        Name = "Roast Street";
        State = Florida;
    }
)

ここで、このNSMutableArrayを並べ替えて、取得する予定の州「フロリダ」に対応する結果を取得するにはどうすればよいですか。

(
        {
        City = "Orlando";
       Name = "Shoreline Dental";
        State = Florida;
    },
 {
        City = "Orlando ";
        Name = "Roast Street";
        State = Florida;
    }
)

私はこのコードを選びましたが、前の4つの辞書が再び表示されます。

NSSortDescriptor *valueDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Florida" ascending:YES];
       NSArray * descriptors = [NSArray arrayWithObject:valueDescriptor];
        NSArray * sortedArray = [arr sortedArrayUsingDescriptors:descriptors];
4

3 に答える 3

7

コンパレータブロックを使用してみてください。

NSIndexSet *indices = [array indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
    return [[obj objectForKey:@"State"] isEqualToString:@"Florida"];
}];
NSArray *filtered = [array objectsAtIndexes:indices];

または、述語を使用することもできます。

NSPredicate *p = [NSPredicate predicateWithFormat:@"State = %@", @"Florida"];
NSArray *filtered = [array filteredArrayUsingPredicate:p];
于 2012-12-24T08:01:04.047 に答える
2

配列に辞書が含まれている場合は、NSPredicateを使用して次のように配列を除外できます。

NSPredicate *thePredicate = [NSPredicate predicateWithFormat:@"State CONTAINS[cd] Florida"];
theFilteredArray = [theArray filteredArrayUsingPredicate:thePredicate];
于 2012-12-24T08:04:27.660 に答える
1

配列名が次のようになっていると仮定します。arr

これは、少し時代遅れの方法ですが、見つけるための典型的な方法の1つです。

for (NSDictionary *dict in arr) {
    if ([[dict objectForKey:@"State"]isEqualToString:@"Florida"]) {
        [filteredArray addObject:dict];
    }
}
NSLog(@"filteredArray->%@",filteredArray);

述語とブロックの使用はすでに投稿されています:)

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"State = %@", @"Florida"];
NSArray *filteredArray = [arr filteredArrayUsingPredicate:predicate];
NSLog(@"filtered ->%@",filteredArray);
于 2012-12-24T08:23:36.693 に答える