NSArray的排序按第二个字。 (按姓氏在"姓姓"一种字符串数组) [英] sort nsarray by second word. (by surname in "firstname surname" kind of strings array)

查看:106
本文介绍了NSArray的排序按第二个字。 (按姓氏在"姓姓"一种字符串数组)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆