Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 按值atIndex对嵌套NSArray的NSMutableArray排序_Objective C_Nsmutablearray_Nsarray - Fatal编程技术网

Objective c 按值atIndex对嵌套NSArray的NSMutableArray排序

Objective c 按值atIndex对嵌套NSArray的NSMutableArray排序,objective-c,nsmutablearray,nsarray,Objective C,Nsmutablearray,Nsarray,我有一个NSMutableArray,其中包含许多NSArray。在每个NSArray中的特定(静态)索引处,有一个值,我希望按该值对NSMutableArray进行排序(从大到小)。现在我正在尝试使用NSSortDescriptor,但不知道如何通过KVC获取和比较特定索引的值。详细说明: #define INDEX_OF_DESIRED_STRING 2 NSArray *a1 = [NSArray arrayWithObjects:@"test", @"jjj", @"3454", ni

我有一个NSMutableArray,其中包含许多NSArray。在每个NSArray中的特定(静态)索引处,有一个值,我希望按该值对NSMutableArray进行排序(从大到小)。现在我正在尝试使用NSSortDescriptor,但不知道如何通过KVC获取和比较特定索引的值。详细说明:

#define INDEX_OF_DESIRED_STRING 2

NSArray *a1 = [NSArray arrayWithObjects:@"test", @"jjj", @"3454", nil]; 
NSArray *a2 = [NSArray arrayWithObjects:@"test1", @"jjj", @"12", nil]; 
NSArray *a3 = [NSArray arrayWithObjects:@"test2", @"jjj", @"232333", nil]; 
NSArray *a4 = [NSArray arrayWithObjects:@"test3", @"jjj", @".122", nil]; 

NSMutableArray *mutableA = [[NSMutableArray alloc] initWithObjects:a1, a2, a3, a4, nil]; 

// Then I'd sort with something like this... although this of course
// does not take the arrays into account. Sorts as if it were only made of strings

NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"floatValue"
                                                 ascending:NO];

[mutableA sortUsingDescriptors:[NSArray arrayWithObject:sd]]; 

尝试使用比较器块进行排序:

NSArray *a1 = [NSArray arrayWithObjects:@"test", @"jjj", @"3454", nil]; 
NSArray *a2 = [NSArray arrayWithObjects:@"test1", @"jjj", @"12", nil]; 
NSArray *a3 = [NSArray arrayWithObjects:@"test2", @"jjj", @"232333", nil]; 
NSArray *a4 = [NSArray arrayWithObjects:@"test3", @"jjj", @".122", nil]; 

NSMutableArray *mutableA = [[NSMutableArray alloc] initWithObjects:a1, a2, a3, a4, nil];

NSLog(@"mutableA before sorting: %@", mutableA);

[mutableA sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    NSArray *array1 = (NSArray *)obj1;
    NSArray *array2 = (NSArray *)obj2;
    NSString *num1String = [array1 objectAtIndex:INDEX_OF_DESIRED_STRING];
    NSString *num2String = [array2 objectAtIndex:INDEX_OF_DESIRED_STRING];

    return [num1String compare:num2String];
}];

NSLog(@"mutableA after sorting: %@", mutableA);

比较器块比它可能的更详细,但我想让它清楚发生了什么。

如果将数值存储为NSNumbers而不是NSStrings,会发生什么?回答很好。谢谢AndrewSuper。谢谢你能详细解释一下它是如何分类的吗?