NSArray的排序按第二个字。 (按姓氏在"姓姓"一种字符串数组) [英] sort nsarray by second word. (by surname in "firstname surname" kind of strings array)
问题描述
我遇到的NSArray像fistname姓字符串。现在我想的字符串数组由第二个字,即按姓氏排序。
我用这个方法
I am having nsarray of strings like "fistname surname". Now I want to sort that strings array by second word i.e. by surname. I used this method
NSArray *sortedArray=[[teachersList allValues] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSLog(@"After %@",sortedArray);
但它第一个字排序数组。
But it sorts array on first word.
和我也有元素或字符串与名字不仅意味着只有第一个字。
And i am also having elements or strings with firstname only means only first word.
那么,如何做到这一点?
So how to do this?
修改
@Janak尼尔默尔
@Janak Nirmal
我修改code是:
while([resultSet next])
{
[teachersList setObject:[NSString stringWithFormat:@"%@ %@",[resultSet stringForColumn:@"first_name"],[resultSet stringForColumn:@"last_name"]] forKey:[resultSet stringForColumn:@"email_id"]];
[emailList addObject:[resultSet stringForColumn:@"email_id"]];
appDelegate.grade=[resultSet stringForColumn:@"grade"];
}
//NSArray *sortedArrays=[[teachersList allValues] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSArray *sortedArray = [[teachersList allValues] sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
NSString *firstTeacher2ndWord = [[[[(Teacher*)a name] componentsSeparatedByString:@" "] objectAtIndex:1] lowercaseString];
NSString *secondTeacher2ndWord = [[[[(Teacher*)b name] componentsSeparatedByString:@" "] objectAtIndex:1] lowercaseString];
return [firstTeacher2ndWord compare:secondTeacher2ndWord];
}];
但我m到处以下错误
but i m getting following error
[__ NSCFString名称]:发送到实例无法识别选择
[__NSCFString name]: unrecognized selector sent to instance
推荐答案
您可以做的有点像,
NSArray *sortedArray = [teacherList sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
NSString *firstTeacher2ndWord = [[[[(Teacher*)a name] componentsSeparatedByString:@" "] objectAtIndex:1] lowercaseString];
NSString *secondTeacher2ndWord = [[[[(Teacher*)b name] componentsSeparatedByString:@" "] objectAtIndex:1] lowercaseString];
return [firstTeacher2ndWord compare:secondTeacher2ndWord];
}];
//Assuming in above you have atleast 2 words in name
//i.e. objectAtIndex:1 doesn't fail or you need to put condition
//there according to your needs
假设下面的模型结构,
Assuming your model structure as below,
@interface Teacher : NSObject
@property (nonatomic,strong) NSString *name;
@end
修改
由于您的[teacherList allValues]将直接持有串值,你应该写如下
As your [teacherList allValues] would be directly holding string values you should write it as below
NSArray *sortedArray = [[teachersList allValues] sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
NSString *firstTeacher2ndWord = [[[((NSString*)a) componentsSeparatedByString:@" "] objectAtIndex:1] lowercaseString];
NSString *secondTeacher2ndWord = [[[((NSString*)b) componentsSeparatedByString:@" "] objectAtIndex:1] lowercaseString];
return [firstTeacher2ndWord compare:secondTeacher2ndWord];
}];
以上code会给你排序的方式对所有值数组直接。
Above code will give you array of all values directly in sorted manner.
这篇关于NSArray的排序按第二个字。 (按姓氏在"姓姓"一种字符串数组)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!