我正在尝试对一组人物对象进行排序。这堂课看起来像这样。
Person
-------
name
phone
我有一个NSMutableArray填充了这些对象。我想按每个人对象的名称对这个数组进行排序。
这是我试过的代码。
NSSortDescriptor *desc = [[NSSortDescriptor alloc] initWithKey: @"name" ascending: YES];
[personArray sortedArrayUsingDescriptors: [NSMutableArray arrayWithObject: desc]];
它不起作用。如何改变工作?
答案 0 :(得分:3)
你知道sortedArrayUsingDescriptors:
返回一个新的(已排序的)数组,对吗?如果要对数组进行就地排序,则需要确保personArray
为NSMutableArray
并使用其sortUsingDescriptors:
方法。
修改强>
或许看一下这两种方法会更有益:
-[NSArray sortedArrayUsingDescriptors:];
-[NSMutableArray sortUsingDescriptors:];
第一个以形容词和名词开头。形容词描述了名词。名词表示它是返回值。由于名词是“数组”,因此方法的返回值为NSArray
是有意义的。由于形容词是“排序的”,因此我们可以假设返回的数组将以某种顺序排列(顺序由“使用”“描述符”指定)。
第二个以动词开头。由于动词是动词,我们可以推断这实际上是一种修改接收器本身的行为方法。由于动词是“排序”,因此我们可以假设接收器在方法完成后将处于某种顺序。
遵循此模式的其他“方法对”:
-[NSString stringByAppendingString:]
和-[NSMutableString appendString:]
-[NSArray filteredArrayUsingPredicate:]
和-[NSMutableArray filterUsingPredicate:]
-[NSCharacterSet invertedSet]
和-[NSMutableCharacterSet invert]
由于您使用的是第一种方法(sortedArrayUsingDescriptors:
),因此必须检索方法的返回值;否则你无所事事地完成所有这些工作。如果你想要“就地”对数组进行排序(即,直接修改接收器而不给予新的NSArray
),那么personArray
必须是NSMutableArray
,必须使用sortUsingDescriptors:
方法。