2

令人困惑!

我有一个NSMutableDictionarytempDict,具有相关值的 Freight、Fuel、Discount(以及更多)。

我正在使用此代码生成两个不同的NSMutableArrays调用arrTVBuyCharge和:arrTVBuyCosttempDict

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

问题:我希望上述数组中的Freight、Fuel 和 Discount以相同的顺序排列(当然,使用 Ordering of Values)。

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

4

3 回答 3

3

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

要获取带有排序键列表的数组:

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]];
}

为了获得更好的性能,请使用initWithCapacityNSMutableArrays 的方法,因为您知道大小。

这是执行此操作的标准方法。

于 2013-04-06T15:11:02.220 回答
1

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

于 2013-04-06T14:27:25.607 回答
1

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)从更新的 tempDict 添加对象:

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

这将使Freight、Fuel 和 Discount位于新数组中的索引0、1 和 2 。

于 2013-04-06T14:39:46.970 回答