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]]];