4

次のNSSortDescriptorコードを使用して配列を並べ替えています。現在、価格で並べ替えていますが、価格にも制限を設けたいと思います。価格で並べ替えることはできますが、たとえば100未満の価格しか表示できませんか?

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
                                        initWithKey: @"price" ascending: YES];

NSMutableArray *sortedArray = (NSMutableArray *)[self.displayItems
                                                     sortedArrayUsingDescriptors: [NSArray arrayWithObject:sortDescriptor]];

[self setDisplayItems:sortedArray];

[self.tableView reloadData];
4

4 に答える 4

13

配列を並べ替えるだけでは十分ではありません。配列もフィルタリングする必要があります。

元のコードの構造を維持している場合は、次のようなフィルターを追加できます。

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
                                    initWithKey: @"price" ascending: YES];

NSArray *sortedArray = [self.displayItems sortedArrayUsingDescriptors: [NSArray arrayWithObject:sortDescriptor]];

NSPredicate *pred = [NSPredicate predicateWithFormat: @"price < 100"];
NSMutableArray *filteredAndSortedArray = [sortedArray filteredArrayUsingPredicate: pred];

[self setDisplayItems: [filteredAndSortedArray mutableCopy]];

[self.tableView reloadData];

パフォーマンスが問題になる場合は、フィルタリングと並べ替えを逆にすることをお勧めしますが、それは詳細です。

于 2013-03-13T10:45:56.427 に答える
1

最初に価格で指定された範囲で配列をフィルタリングし、次にフィルタリングされた配列を並べ替えて、並べ替えられた配列をテーブルビューに表示できます!!!

フィルタリングには使用できNSPredicate、並べ替えには同じものを使用できますNSSortDescriptor

これがお役に立てば幸いです!!!

于 2013-03-13T10:39:21.540 に答える
0
NSSortDescriptor *sorter = [[NSSortDescriptor alloc] initWithKey:@"your key" ascending:true];
[yourarray sortUsingDescriptors:[NSArray arrayWithObject:sorter]];
[sorter release];
于 2013-03-13T10:35:30.260 に答える
0
NSMutableArray * weekDays = [[NSMutableArray alloc] initWithObjects:@"Sunday",@"Monday",@"Tuesday",@"Wednesday",@"Thursday",@"Friday",@"Saturday", nil];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
NSMutableArray *dictArray = [[NSMutableArray alloc] init];

for(int i = 0; i < [weekDays count]; i++)
{
    dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%i",i],@"WeekDay",[weekDays objectAtIndex:i],@"Name",nil];
    [dictArray addObject:dict];
}
NSLog(@"Before Sorting : %@",dictArray);

@try
{
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Name" ascending:NO];
    NSArray *descriptor = @[sortDescriptor];
    NSArray *sortedArray = [dictArray sortedArrayUsingDescriptors:descriptor];
    NSLog(@"After Sorting : %@",sortedArray);
}
@catch (NSException *exception)
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sorting cant be done because of some error" message:[NSString stringWithFormat:@"%@",exception] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
    [alert setTag:500];
    [alert show];
    [alert release];
}
于 2014-01-29T06:55:06.070 に答える