令人困惑!!
我有一个NSMutableDictionary
称为tempDict
,具有键运费,燃料,折扣(以及更多)与相关的值。
我使用以下代码从tempDict
生成两个不同的NSMutableArrays
,称为arrTVBuyCharge
和arrTVBuyCost
:
[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序列号,按照它们被放置的顺序排序,然后修剪字符串的前两个字符并使用它