[英]Sorting of NSMutableDictionary
令人困惑!
我有一個名為tempDict
NSMutableDictionary
,其中包含具有相關值的 鍵 Freight,Fuel,Discount (還有更多)。
我正在使用以下代碼從tempDict
生成兩個不同的NSMutableArrays
稱為arrTVBuyCharge
和arrTVBuyCost
:
[arrTVBuyCharge addObjectsFromArray:[(NSArray *)[tempDict allKeys]]];
[arrTVBuyCost addObjectsFromArray:[(NSArray *)[tempDict allValues]]];
問題:我希望以上陣列中的頂部貨運,燃料和折扣以相同的順序排列(Ofcourse,按值的順序排列)。
實現此目的的最佳方法是什么?
乍一看似乎很棘手,但是考慮起來很簡單。 您要做的就是獲取排序的鍵列表,並在將每個鍵添加到數組時查找每個鍵的值。
要獲得具有排序鍵列表的數組:
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]];
}
為了獲得更好的性能,請對NSMutableArrays使用initWithCapacity
方法,因為您知道大小。
這是這樣做的標准方法。
伙計,NSMutableDictionary總是以無序的方式返回鍵,如果您確實想維護順序,則可以按字母順序對其進行排序,也可以在值之前添加01、02、03序列號,以按其放置順序對其進行排序,稍后修剪字符串的前兩個字符並使用它。
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]];
這將使貨運,燃料和折扣在新陣列中的索引分別為0、1和2 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.