Sort nsarray by the second word. (by last name in string "firstname surname" of string type)

I have nsarray strings such as "profile last name". Now I want to sort the array of strings by the second word, i.e. By last name. I used this method

NSArray *sortedArray=[[teachersList allValues] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
    NSLog(@"After %@",sortedArray);

But it sorts the array by first word.

And I also have elements or lines with the first name, this means only the first word.

So how to do this?

Edit

@ Janak Nirmal

My modified code is:

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];
    }];

but i get the following error

[__ NSCFString name]: unrecognized selector sent to instance

+4
source share
2 answers

You can pretend, for example,

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 is lower,

@interface Teacher : NSObject

@property (nonatomic,strong) NSString *name;

@end

[teacherList allValues] ,

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];
}];

.

+4

, "first name"

NSArray *listItems = [list componentsSeparatedByString:@" "];

,

@{@"FirstName" : listItems[0], "FirstName" : listItems[1]}

add into array and then you can sort this

NSArray *keys = [theDictionary allKeys];
NSArray *sortedKeys = [keys sortedArrayUsingSelector:@selector(compareMethod:)];
+2

All Articles