1

我有一个NSMutableDictionary带两把钥匙的。一种用于标题(例如“测试”),另一种用于距离(例如“200”英里)。

如何按最近或最远距离对这些值进行排序。订购时,我需要同时更改标题和距离值索引。

所以这将是常规版本NSMutableDictionary

Titles: (
    "Test1"
    "Test2"
    "Test3"
)

Distances: (
    "240"
    "43"
    "482"
)

和订购的版本(最近的距离):

Titles: (
    "Test2"
    "Test1"
    "Test3"
)

Distances: (
    "43"
    "240"
    "482"
)
4

3 回答 3

3

我不禁觉得您想要的是 NSDictionaries 的 NSArray 或自定义对象的 NSArray。这种设计感觉真的很尴尬,并产生了额外的工作——因为如果你以这种方式构建数据,唯一真正的答案是“围绕整个事物创建一个自定义 API,非常小心地管理这个不变量,然后只通过那个接口改变这个数据结构。”

于 2012-09-24T20:27:00.573 回答
1

正如@Chuck 所说,如果对这两个数组进行排序或保持它们的排序是关键操作,那么对数组是显而易见的结构。但是,如果这是一种罕见的操作,并且有充分的理由将其保留为 2 数组字典,那么您可以通过以下方式实现您的目标:

  1. 创建一个新数组(NSArray 或普通 C 数组),其元素数量n与您的数组相同。
  2. 用整数 0 到 ( n - 1)填充这个数组
  3. 自定义排序该数组基于在相同索引处查找数组中的值Distances并比较它们来排序两个值。
  4. 完成后,您有一个索引数组作为您希望应用于两个数组的排列。
  5. 置换两个数组。

但是一组对会更容易......

于 2012-09-24T20:55:58.967 回答
0

我会这样做:

NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:@"TEST1", @"TITLE", [NSNumber numberWithInt:240], @"DISTANCE", nil];
NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"TEST2", @"TITLE", [NSNumber numberWithInt:43], @"DISTANCE", nil];
NSDictionary *dic3 = [NSDictionary dictionaryWithObjectsAndKeys:@"TEST3", @"TITLE", [NSNumber numberWithInt:482], @"DISTANCE", nil];

NSSortDescriptor *distanceSort = [NSSortDescriptor sortDescriptorWithKey:@"DISTANCE" ascending:YES]; //Set 'NO' to order from biggest to lowest

NSArray *sortedArrayOfDic = [[NSArray arrayWithObjects:dic1, dic2, dic3, nil] sortedArrayUsingDescriptors:[NSArray arrayWithObjects:distanceSort, nil]];

NSLog(@"%@", sortedArrayOfDict);

输出将是一个按距离排序的字典数组,例如:

"43", "TEST2"
"240", "TEST1"
"482", "TEST3"
于 2012-09-24T20:57:50.647 回答