首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试从name对象中按姓氏排序

问尝试从name对象中按姓氏排序
EN

Stack Overflow用户
提问于 2015-03-03 13:17:22
回答 2查看 57关注 0票数 0

我有以下代码块:

代码语言:javascript
复制
sortedNameArray = [nameArray  sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2){
    return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];

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

代码语言:javascript
复制
  Name *bobSmith = [[Name alloc] init];
[bobSmith setFirstName:@"Bob"];
[bobSmith setLastName:@"Smith"]; // this is what I want to alphabetize it by

我试过了:

代码语言:javascript
复制
  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),并根据此对对象进行字母排序?

EN

回答 2

Stack Overflow用户

发布于 2015-03-03 13:25:17

代码语言:javascript
复制
sortedNameArray = [nameArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    return [[obj1 lastName] compare:[obj2 lastName]];
}];
票数 0
EN

Stack Overflow用户

发布于 2015-03-03 13:28:10

您可以使用sortDescriptors按字母顺序排列Name对象的数组

代码语言:javascript
复制
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:,然后使用标准比较器对返回值进行排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28824600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档