我的NSArray
包含NSDictionary
个实例,在词典中我有orderid。
我想让它们按降序排序。但它没有排序。
我试过这段代码
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"orderid" ascending:FALSE];
[self.orderArray sortUsingDescriptors:[self.orderArray arrayWithObject:sortDescriptor]];
[sortDescriptor release];
这段代码:
[self.orderArray sortUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"orderid" ascending:NO]]];
但它没有用。
这是日志
orders : (
{
orderid = 6739;
},
{
orderid = 6740;
},
{
orderid = 6745;
},
{
orderid = 6746;
},
{
orderid = 6748;
},
)
答案 0 :(得分:1)
这应该有效
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"orderid.intValue" ascending:NO ];
[self.orderArray sortUsingDescriptors:@[sortDescriptor]];
答案 1 :(得分:0)
您可以使用“自定义”比较器对数组进行排序。
NSMutableArray *nds = [[NSMutableArray alloc] initWithArray:nodes];
//
[nds sortUsingComparator:^NSComparisonResult(Node *f1,Node *f2){
if (f1.nodeType == FOLDER && f2.nodeType == FILE) {
return NSOrderedAscending;
} else if (f1.nodeType == FILE && f2.nodeType == FOLDER) {
return NSOrderedDescending;
} else if (f1.nodeType == f2.nodeType) {
return [f1.displayName localizedCaseInsensitiveCompare:f2.displayName];
}
//
return [f1.displayName compare:f2.displayName];
}];
此方法将遍历数组,从数组中取出两个对象并进行比较
优点是对象可以是任何类型(类),您可以决定两者之间的顺序。
在上面的例子中我想订购:
- 文件前的文件夹
- 按字母顺序排列的文件夹和文件
答案 2 :(得分:0)
我同意@HotLicks这段代码必须正常工作。您确定排序代码和日志之间没有代码。如果有,请添加它。
我看到的唯一问题是你在[self.orderArray sortUsingDescriptors:[self.orderArray arrayWithObject:sortDescriptor]];
这一行添加了你的数组名而不是NSArray。
这样做:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"orderid" ascending:FALSE];
[self.orderArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; //Change in this line
[sortDescriptor release];
NSLog(@"self.orderArray : %@",self.orderArray);