objective-c - 如何使用 NSSortDescriptor 对 NSMutableArray 进行排序

标签 objective-c cocoa nssortdescriptor

我正在使用以下 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];

最佳答案

仅对数组进行排序是不够的 - 您还需要对其进行过滤。

如果我们保持您原始代码的结构,您可以像这样添加一个过滤器:

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];

如果性能成为问题,您可能想要反转过滤和排序,但这是一个细节。

关于objective-c - 如何使用 NSSortDescriptor 对 NSMutableArray 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15382818/

相关文章:

html - 我可以使用 Xcode 将文件写入 HTML 文件,然后将其加载到 Web View 中吗?

objective-c - 在 Cocoa 中同时显示多个工具提示

objective-c - 在我的应用程序中放置 'terminal'?

iphone - 关于内存泄漏的问题(包括 Instruments 的屏幕截图)

objective-c - NSView Controller 位于 NSWindow Controller 内部吗?

ios - 尝试在演示过程中在 UITabBarController 上显示 UIImagePickerController

objective-c - 当我使用 objective-c 中定义的宏时,Swift 条件编译无法正常工作

iphone - 使用NSSortDescriptor对特定项目进行排序的数组

objective-c - 按日期排序 NSMutableArray

objective-c - 使用 NSSortDescriptor 对数字进行排序