使用多个键排序NSMutableDictionary

时间:2012-09-24 20:16:49

标签: objective-c ios xcode arrays nsmutabledictionary

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

如何按最近或最远距离订购这些值。我需要标题和距离值索引在订购时更改。

所以这将是NSMutableDictionary的常规版本:

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

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

订购版本(最近距离):

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

  1. 使用与数组相同的数字 n 创建一个新数组(NSArray或纯C数组)。
  2. 使用整数0到( n - 1)
  3. 填充此数组
  4. 自定义排序,该数组根据在相同索引处查找Distances数组中的值并对其进行比较来排序两个值。
  5. 完成后,您会有一系列索引作为您希望应用于两个数组的排列。
  6. 置换两个阵列。
  7. 但是一系列对将更容易......

答案 2 :(得分: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"