0

NSPredicateを使用して次のターゲット値を取得しようとしています。

しかし、NSPredicate構文を使用するのに問題があります。

ソースデータ内の同じ名前の最大年齢の姓リストを重複せずに取得したい。

誰か助けてください...

NSDictionary *dic1 = [NSDictionary dictionaryWithObjects:@[@"James",    @10] forKeys:@[@"LastName", @"Age"]];
NSDictionary *dic2 = [NSDictionary dictionaryWithObjects:@[@"Robert",   @15] forKeys:@[@"LastName", @"Age"]];
NSDictionary *dic3 = [NSDictionary dictionaryWithObjects:@[@"Robert",   @10] forKeys:@[@"LastName", @"Age"]];
NSDictionary *dic4 = [NSDictionary dictionaryWithObjects:@[@"James",    @20] forKeys:@[@"LastName", @"Age"]];
NSDictionary *dic5 = [NSDictionary dictionaryWithObjects:@[@"David",    @20] forKeys:@[@"LastName", @"Age"]];
NSDictionary *dic6 = [NSDictionary dictionaryWithObjects:@[@"Walter",   @30] forKeys:@[@"LastName", @"Age"]];
NSDictionary *dic7 = [NSDictionary dictionaryWithObjects:@[@"Nicholas", @30] forKeys:@[@"LastName", @"Age"]];
NSDictionary *dic8 = [NSDictionary dictionaryWithObjects:@[@"David",    @30] forKeys:@[@"LastName", @"Age"]];
NSDictionary *dic9 = [NSDictionary dictionaryWithObjects:@[@"David",    @30] forKeys:@[@"LastName", @"Age"]];

NSArray *persons = [NSArray arrayWithObjects:dic1, dic2, dic3, dic4, dic5, dic6, dic7, dic8, dic9, nil];

NSPredicate *predicate = [NSPredicate predicateWithFormat:???]

NSArray *result = [persons filteredArrayUsingPredicate:predicate];
NSLog(@"result : %@",result);



source data
LastName          age
James              10
Robert             15
Robert             10
James              20
David              20
Walter             30
Nicholas           30
David              30
David              30

target data
James              20
Robert             15
David              30
Walter             30
Nicholas           30
4

1 に答える 1

0

これが述語でできるとは思わない。これを行うには、キー「Age」を使用して配列を並べ替え、その配列をループして、最初のレコードを結果配列に追加し、次のレコードが最初のレコードと同じLastNameを持っているかどうかを確認します。 tそれを最終的な配列に追加します。このような:

NSArray *sorters = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"Age" ascending:NO]];
    NSArray *sorted = [persons sortedArrayUsingDescriptors:sorters];
    NSMutableArray *result = [NSMutableArray array];
    for (id dict in sorted) {
        if (! [[result valueForKey:@"LastName"] containsObject:[dict valueForKey:@"LastName"]]) {
            [result addObject:dict];
        }
    }
    NSLog(@"%@",result);
于 2012-08-21T15:31:21.170 に答える