尝试按名称对象的姓氏排序

时间:2015-03-03 05:17:22

标签: ios objective-c xcode nsmutablearray objective-c-blocks

我有以下块:

sortedNameArray = [nameArray  sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2){
    return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];

我用它来获取一个字符串数组并按字母顺序排列它们。现在我要做的是通过查看姓氏属性然后按其lastName属性按字母顺序排列对象,使其按字母顺序排列Name对象数组(具有NSString firstName和NSString lastName的对象)。以下是Name对象的示例:

  Name *bobSmith = [[Name alloc] init];
[bobSmith setFirstName:@"Bob"];
[bobSmith setLastName:@"Smith"]; // this is what I want to alphabetize it by

我试过了:

  for (int i = 0; i < [nameArray count]; i++){
sortedNameArray = [[nameArray[i] getLastName]  sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2){
    return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];
}

但这显然不起作用。我如何通过查看其中一个字符串属性来使这个方法按字母顺序排列对象数组....即获取一个Name对象数组,查看它们的姓氏(NSString)并根据对象按字母顺序排列对象这个?

2 个答案:

答案 0 :(得分:0)

sortedNameArray = [nameArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    return [[obj1 lastName] compare:[obj2 lastName]];
}];

答案 1 :(得分:0)

您可以使用sortDescriptors来对Name对象数组进行字母表

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastname" ascending:YES];

NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];

NSArray *sortedArray = [nameArray sortedArrayUsingDescriptors:sortDescriptors];

nameArray =[NSMutableArray arrayWithArray:sortedArray];

我从排序描述符编程主题中提取代码。此外,键值编码开始发挥作用,sortedArrayUsingDescriptors:将向myArray中的每个元素发送一个valueForKey:,然后使用标准比较器对返回的值进行排序。