Sorting of NSMutableDictionary



令人困惑!!

我有一个NSMutableDictionary称为tempDict,具有运费,燃料,折扣(以及更多)与相关的

我使用以下代码从tempDict生成两个不同的NSMutableArrays,称为arrTVBuyChargearrTVBuyCost:

[arrTVBuyCharge addObjectsFromArray:[(NSArray *)[tempDict allKeys]]];
[arrTVBuyCost addObjectsFromArray:[(NSArray *)[tempDict allValues]]];

问题:我希望运费,燃料和折扣在上述数组的顶部以相同的顺序(当然,与排序)。

实现这一目标的最佳方法是什么

乍一看似乎很棘手,但仔细想想就会发现很简单。您所要做的就是获得键的排序列表,并在将每个键添加到数组时查找它们的值。

获取包含排序键列表的数组:

NSArray *sortedKeys = [[tempDict allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

然后遍历这些并将它们添加到NSMutableArrays:

NSMutableArray *arrTVBuyCharge = [[NSMutableArray alloc] init];
NSMutableArray *arrTVBuyCost = [[NSMutableArray alloc] init];
for (NSString *key in sortedKeys) {
   [arrTVBuyCharge addObject:key];
   [arrTVBuyCost addObject:[tempDict objectForKey:key]];
}

为了更好的性能,使用initWithCapacity方法nsmutablearray,因为你知道它的大小。

1)分别获取三个对象:

NSArray *mainKeys = @[@"Freight", @"Fuel", @"Discount"];
NSArray *mainValues = @[[tempDict valueForKey:@"Freight"],
        [tempDict valueForKey:@"Fuel"],
        [tempDict valueForKey:@"Discount"]
        ];
[arrTVBuyCharge addObjectsFromArray:mainKeys];
[arrTVBuyCost addObjectsFromArray:mainValues];

2)从tempDict中删除它们:

[tempDict removeObjectsForKeys:mainKeys];

3)添加updatedtempdict:

中的对象
[arrTVBuyCharge addObjectsFromArray:(NSArray *)[tempDict allKeys]];
[arrTVBuyCost addObjectsFromArray:(NSArray *)[tempDict allValues]];

这将使运费,燃料和折扣在索引 0,1和2在您的新数组。

天,NSMutableDictionary总是以无序的方式返回键,如果你真的想保持顺序,那么你可以按字母顺序排序,或者你可以在你的值之前添加01,02,03序列号,按照它们被放置的顺序排序,然后修剪字符串的前两个字符并使用它

最新更新