sorting在nsdictionary上给出不同的结果比在nsarraysorting
2天前我问了如何通过string对象中的第二个字sorting元素的问题
我在这里得到解决scheme
但现在我陷入了新的问题
考虑我有
nsarray与 – >名称和
nsdictionary使用相同的名称(nsarray)作为键值和电子邮件ID
而我的nsarray包含
"Test Teacher" "Anonymous" "Dok Teacher"
和我的nsdictionary包含
"Dok Teacher" --"a@g.com" "Anonymous" -- "b@g.com" "Test Teacher" --"c@g.com"
因为我需要sorting这些数组和字典我使用上面的链接给出的方法sorting
但sorting后,我得到的数据如下
nsarraysorting第二个单词后
"Anonymous" "Test Teacher" "Dok Teacher"
在对值的第二个字进行sorting之后的nsdictionary
"Anonymous" -- "b@g.com" "Dok Teacher" --"a@g.com" "Test Teacher" --"c@g.com"
为什么老师和testing老师在词典和nsarray中的不同位置,使用同样的方法进行sorting。
以及如何让它们以相同的顺序排列和字典。
代码sortingnsarray:
NSMutableArray *sortedArray = [NSMutableArray arrayWithArray:[teachersNames 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]; }]]; NSLog(@"After %@",sortedArray); teachersSrc=[NSMutableArray arrayWithArray:sortedArray];
用于sortingnsdictionary的代码
myArray = [teachersList keysSortedByValueUsingComparator:^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]; }]; NSLog(@"After %@",myArray);
编辑:
我也曾尝试对数组和字典的名字进行sorting,然后对两者的姓氏进行sorting,但是根本不工作,
鉴于你有这样的:
NSArray *array = @[@"Test Teacher",@"Anonymous",@"Dok Teacher"]; NSDictionary *dictionary = @{@"a@g.com":@"Dok Teacher",@"b@g.com":@"Anonymous",@"c@g.com":@"Test Teacher"}; //sort the array first NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { NSString *firstTeacher2ndWord =[[(NSString *)obj1 componentsSeparatedByString:@" "]lastObject]; NSString *secondTeacher2ndWord =[[(NSString *)obj2 componentsSeparatedByString:@" "]lastObject]; if([firstTeacher2ndWord compare:secondTeacher2ndWord options:NSCaseInsensitiveSearch] == FALSE){ // means they are the same //compare full text firstTeacher2ndWord = (NSString *)obj1; secondTeacher2ndWord = (NSString *)obj2; } return [firstTeacher2ndWord compare:secondTeacher2ndWord options:NSCaseInsensitiveSearch]; }]; NSLog(@"Sorted Array %@",sortedArray); //sort the dictionary key using values NSArray *sortedDictionaryKey =[dictionary keysSortedByValueUsingComparator:^NSComparisonResult(id obj1, id obj2) { NSString *firstTeacher2ndWord =[[(NSString *)obj1 componentsSeparatedByString:@" "]lastObject]; NSString *secondTeacher2ndWord =[[(NSString *)obj2 componentsSeparatedByString:@" "]lastObject]; if([firstTeacher2ndWord compare:secondTeacher2ndWord options:NSCaseInsensitiveSearch] == FALSE){ // means they are the same //compare full text firstTeacher2ndWord = (NSString *)obj1; secondTeacher2ndWord = (NSString *)obj2; } return [firstTeacher2ndWord compare:secondTeacher2ndWord options:NSCaseInsensitiveSearch] }]; //get the values from the dictionary based on the sorted keys NSLog(@"Sorted Dictionary %@",[dictionary objectsForKeys:sortedDictionaryKey notFoundMarker:[NSNull null]]);
会给你这个输出:
//Sorted Array Sorted Array( Anonymous, "Dok Teacher", "Test Teacher" ) //Sorted Dictionary Sorted Dictionary( Anonymous, "Dok Teacher", "Test Teacher" )
首先,字典(teachersList)的值数组是未sorting的,您不知道如何排列元素。
第二个Dok Teacher
和Test Teacher
在第二个单词上是一样的,他们之间没有顺序,sorting后的顺序依赖于sorting方法(稳定或不稳定)和原始排列的顺序。
如果值数组中的元素在teachersNames
顺序相同,则结果将相同。 否则, Dok Teacher
和Test Teacher
是不确定的。
注意:这里的数组数组是teachersList.allValues
代码中的问题是Teacher
包含的第二个名字。 所以当你sorting相同的数组。 它将按字母顺序排列名称。 由于第二个名字对于两个单词是相同的。 所以它不会反映在输出中。 但是,如果您更改顺序,那么您可以看到预期的输出。 我已经实现了对下面的数组进行sorting的代码:
当执行下面的代码时,你会得到输出:
NSArray *array1=@[@"Test Teacher",@"Anonymous",@"Dok Teacher"]; NSArray *sortedArray=[array1 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { return [obj1 compare:obj2 options:NSCaseInsensitiveSearch]; }]; NSLog(@"%@",sortedArray);
输出: –
Anonymous, "Dok Teacher", "Test Teacher"