使用数组索引对数组进行排序

Posted

技术标签:

【中文标题】使用数组索引对数组进行排序【英文标题】:Sort an array using array index 【发布时间】:2012-12-07 05:48:23 【问题描述】:

我被困在这里...... 我有两个数组 Arr_title 和 Arr_distance 我使用这种方法对 Arr_distance 进行了排序

NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES]autorelease];

sortedFloats = [appDel.Arr_distance sortedArrayUsingDescriptors:
                             [NSArray arrayWithObject:sortDescriptor]];

但问题是我想根据 sortedFloats 数组的索引对 Arr_title 进行排序...

谢谢提前帮助我.......

【问题讨论】:

sortedFloats arry 是什么意思 【参考方案1】:

试试这个,

NSDictionary *dict = [NSDictionary dictionaryWithObjects:Arr_title forKeys:Arr_distance];

NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES] autorelease];
sortedFloats = [appDel.Arr_distance sortedArrayUsingDescriptors:
                         [NSArray arrayWithObject:sortDescriptor]];


NSMutableArray *sortedTitles = [NSMutableArray array];

for (NSString *key in sortedFloats) //or just use sortedTitles = [dict objectsForKeys:sortedFloats notFoundMarker:[NSNull null]];
    [sortedTitles addObject:[dict valueForKey:key]]; 


NSLog(@"%@",sortedValues);

sortedTitles 应该为您提供按与sortedFloats 相同的顺序排序的数组。

【讨论】:

【参考方案2】:

嘿,不要使用两个不同的数组,而是使用 1 个字典,key title,distance 将该字典保存在数组中,然后对该数组进行排序 所以你已经组合在一起了,所以由于映射没有任何问题任何排序(按标题和距离)。

【讨论】:

【参考方案3】:

如果我理解你的问题,你可以使用 NSDictionary 来完成同样的任务

NSMutableArray *array = [NSMutableArray arrayWithArray:@[ @@"title" : @"City1",@"dist" : @5,

                             @ @"title" : @"City2",@"dist" : @2.3 ,
                             @@"title" : @"City3",@"dist" : @11.0 ,
                             @@"title" : @"City4",@"dist" : @1.0,
                             @@"title" : @"City5",@"dist" : @.5,
                             @@"title" : @"City6",@"dist" : @13 ]];

NSLog(@"dict<%@>",array);

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"dist" ascending:YES];

NSArray *sortarray = [array sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];

NSLog(@"sort array = <%@>",sortarray);

【讨论】:

【参考方案4】:

我得到了解决方案,看下面的代码............

NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES]autorelease];

sortedFloats = [appDel.Arr_distance sortedArrayUsingDescriptors:
                             [NSArray arrayWithObject:sortDescriptor]];

 NSLog(@" Sorted Array : %@", sortedFloats);

 NSDictionary *dictTitle = [NSDictionary dictionaryWithObjects:Arr_title   forKeys:appDel.Arr_distance];

// Sort the second array based on the sorted first array
sortedTitle = [dictTitle objectsForKeys:sortedFloats notFoundMarker:[NSNull null]];


NSLog(@" Sorted Title : %@",sortedTitle);


// Put the two arrays into a dictionary as keys and values
NSDictionary *dictAddress = [NSDictionary dictionaryWithObjects:Arr_address   forKeys:appDel.Arr_distance];

// Sort the second array based on the sorted first array
sortedAddress = [dictAddress objectsForKeys:sortedFloats notFoundMarker:[NSNull null]];


NSLog(@" Sorted Address : %@",sortedAddress);

如果在其他方法中使用,不要忘记保留您的数组 ....

【讨论】:

以上是关于使用数组索引对数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Swift 对数组进行排序并返回索引和元素的数组

对数组进行排序并保留原始索引

如何按相同的索引对两个数组进行排序?

在C中排序后跟踪数组的原始索引

如何对数组进行排序并返回配置单元中的索引?

如何按值对数组进行排序(排序)? *有一个转折*