簡體   English   中英

NSMutableDictionary的排序

[英]Sorting of NSMutableDictionary

令人困惑!

我有一個名為tempDict NSMutableDictionary ,其中包含具有相關值的 Freight,Fuel,Discount (還有更多)。

我正在使用以下代碼從tempDict生成兩個不同的NSMutableArrays稱為arrTVBuyChargearrTVBuyCost

[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM