Iphone 如何按数组计数对嵌套NSArray的NSArray排序?

Iphone 如何按数组计数对嵌套NSArray的NSArray排序?,iphone,objective-c,ios,nsmutablearray,nsarray,Iphone,Objective C,Ios,Nsmutablearray,Nsarray,我有一个包含嵌套NSArray的NSArray。我正在寻找一种方法,根据嵌套数组的对象计数按升序对父数组进行排序。所以如果[array1 count]是4,[array2 count]是2,[array3 count]是9,我会得到:array2,array1,array3 静态NSInteger MONSortObjectsAscendingByCount(id lhs、id rhs、void*忽略){ static NSInteger MONSortObjectsAscendingByCou

我有一个包含嵌套NSArray的NSArray。我正在寻找一种方法,根据嵌套数组的对象计数按升序对父数组进行排序。所以如果
[array1 count]
是4,
[array2 count]
是2,
[array3 count]
是9,我会得到:array2,array1,array3

静态NSInteger MONSortObjectsAscendingByCount(id lhs、id rhs、void*忽略){
static NSInteger MONSortObjectsAscendingByCount(id lhs, id rhs, void* ignored) {
/* error checking omitted */
    const NSUInteger lhsCount = [lhs count];
    const NSUInteger rhsCount = [rhs count];

    if (lhsCount < rhsCount) {
        return NSOrderedAscending;
    }
    else if (lhsCount > rhsCount) {
        return NSOrderedDescending;
    }
    else {
        return NSOrderedSame;
    }
}

/* use if mutable, and you wnat it sorted in place */
- (void)sortUsingFunction:(NSInteger (*)(id, id, void *))compare context:(void *)context;

/* else use */
- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))compare context:(void *)context;
/*省略错误检查*/ 常量整数lhscont=[lhs计数]; 常量NSU整型RHSCONT=[rhs计数]; 如果(lhsuntrhsunt){ 退而求其次; } 否则{ 返回指定名称; } } /*如果是可变的,则使用,并将其排序到位*/ -(void)sortUsingFunction:(NSInteger(*)(id,id,void*))比较上下文:(void*)上下文; /*其他用途*/ -(NSArray*)SorterDarrayUsing函数:(NSInteger(*)(id,id,void*))比较上下文:(void*)上下文;
静态NSInteger MonsortObjectsSCENDINGBYCOUNT(id lhs、id rhs、void*忽略){
/*省略错误检查*/
常量整数lhscont=[lhs计数];
常量NSU整型RHSCONT=[rhs计数];
如果(lhsuntrhsunt){
退而求其次;
}
否则{
返回指定名称;
}
}
/*如果是可变的,则使用,并将其排序到位*/
-(void)sortUsingFunction:(NSInteger(*)(id,id,void*))比较上下文:(void*)上下文;
/*其他用途*/
-(NSArray*)SorterDarrayUsing函数:(NSInteger(*)(id,id,void*))比较上下文:(void*)上下文;

有几种解决方案,其中之一是:

NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"@count"
                                                     ascending:YES];
NSArray *sds = [NSArray arrayWithObject:sd];
NSArray *sortedArray = [array sortedArrayUsingDescriptors:sds];

有几种解决方案,其中之一是:

NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"@count"
                                                     ascending:YES];
NSArray *sds = [NSArray arrayWithObject:sd];
NSArray *sortedArray = [array sortedArrayUsingDescriptors:sds];

名称不以
MON
开头的函数?你是谁,你对贾斯汀做了什么?UGGGGHHHHHHHHHHHHHHHH=p贾斯汀今天头痛,建造完成了。感谢您指出这一点——我现在已经修复了=)一个名称不以
MON
开头的函数?你是谁,你对贾斯汀做了什么?UGGGGHHHHHHHHHHHHHHHH=p贾斯汀今天头痛,建造完成了。感谢您指出这一点——我现在已经修复了=)@Sam,您可以始终使用
@count
收集操作符进行符合KVC的收集。啊,我很抱歉。我不知道/误读了你的代码。很酷!很好!。。我在提问之前尝试过,但我使用了
@“count”
作为键,结果它崩溃了。。。
@“@count”
的秘密是什么?@KDaker
NSArray
没有一个名为
count
的KVC兼容密钥。有一个名为
-count
的实例方法,但它不是KVC意义上的键。这就是说,在Cocoa集合中,您可以使用名为的特殊密钥路径,
@count
就是其中之一。@Sam确实如此,您可以始终使用
@count
集合运算符进行符合KVC的集合。啊,我很抱歉。我不知道/误读了你的代码。很酷!很好!。。我在提问之前尝试过,但我使用了
@“count”
作为键,结果它崩溃了。。。
@“@count”
的秘密是什么?@KDaker
NSArray
没有一个名为
count
的KVC兼容密钥。有一个名为
-count
的实例方法,但它不是KVC意义上的键。也就是说,在Cocoa集合中,您可以使用名为的特殊密钥路径,
@count
就是其中之一。