无法根据包含的数字对数组进行排序

时间:2014-01-29 12:30:40

标签: ios iphone nsmutablearray nsdictionary nssortdescriptor

我的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;
    },
)

3 个答案:

答案 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);