Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.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 如何对NSMutableDictionary的NSMutableArray排序?_Objective C_Nsmutablearray_Nsarray_Nsdictionary - Fatal编程技术网

Objective c 如何对NSMutableDictionary的NSMutableArray排序?

Objective c 如何对NSMutableDictionary的NSMutableArray排序?,objective-c,nsmutablearray,nsarray,nsdictionary,Objective C,Nsmutablearray,Nsarray,Nsdictionary,这是我的密码: NSSortDescriptor *sortByName = [NSSortDescriptor sortDescriptorWithKey:@"contact_name" ascending:YES]; NSArray *sortDescriptors = [NSArray arrayWithObject:sortByName]; arrayOfDictionary = [arrayOfDictionary sortedArrayUsingDescriptors:sor

这是我的密码:

NSSortDescriptor *sortByName = [NSSortDescriptor sortDescriptorWithKey:@"contact_name" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortByName];    
arrayOfDictionary = [arrayOfDictionary sortedArrayUsingDescriptors:sortDescriptors];
显然这不起作用,因为
arrayOfDictionary
是一个
NSMutableArray
。我环顾了很多地方,我看到的字典数组的排序都是用不可变数组完成的。谁能告诉我如何使用
NSMutableArray
实现这一点

arrayOfDictionary = [arrayOfDictionary sortedArrayUsingDescriptors:sortDescriptors] mutableCopy];

虽然不是最好的方法,但它可以满足您的需要。

如果您想对可变数组进行排序,您可以使用
排序描述符。

如果您的字典数组包含键
请联系\u name
,您的代码应该可以正常工作。请注意下面的简化需要更少的代码

请注意,您可以使用描述符从可变或不可变数组创建一个新数组。您还可以使用
排序描述符对可变数组进行排序

因此:


你为什么说“显然这不管用”?上面代码中的主要问题是丢弃排序数组。(但如果你费心去看NSMutableArray的规范,你会发现有几个“就地排序”选项.RTFM。)那么很明显,它不起作用……我唯一要找的就是sortUsingDescriptors。[arrayOfDictionary sortUsingDescriptors:sortDescriptors];将其用于对NSMutableArray进行排序,这在NSMutableArray规范中有明确的记录,但您没有检查。这将返回一个(新的)不可变数组,不是可变数组。即使
arrayOfDictionary
是一个
NSMutableArray
,SorterDarrayUsingDescriptors
的返回值是一个
NSArray
@Martiner,这就是为什么最后的mutableCopy会返回一个NSMutableArray的原因。但是使用mutableCopy比简单地对t进行排序要困难得多他将原始阵列放在适当的位置,这可以使用sortUsing来完成。。。。
NSArray *newArray = [arrayOfDictionary sortedArrayUsingDescriptors:
   @[[NSSortDescriptor sortDescriptorWithKey:@"contact_name" ascending:YES]]];

// if you need it mutable:
NSMutableArray *mutableArrayOfDictionary = [NSMutableArray arrayWithArray:newArray];
[mutableArrayOfDictionary sortUsingDescriptors:
   @[[NSSortDescriptor sortDescriptorWithKey:@"contact_name" ascending:YES]]];