2013-12-09 145 views
0

我有一個NSMutableDictionary對象,其中包含iPhone應用程序的菜單項列表。菜單項目的所需順序不是按字母順序的,因此排序鍵的標準方式不是真正的選項。我的字典是如下,並在需要的順序(據我所知,詞典都沒有排序 - 我需要按鍵順序排序的數組)初始化:使用自定義順序對NSArray進行排序

menuDict = [[NSMutableDictionary alloc] init]; 
    [menuDict setObject:@"Main Menu" forKey:@"EntryViewController"]; 
    [menuDict setObject:@"States Lookup" forKey:@"AllStatesViewController"]; 
    [menuDict setObject:@"Favorites" forKey:@"FavoritesViewController"]; 
    [menuDict setObject:@"Help" forKey:@"HelpViewController"]; 
    [menuDict setObject:@"About" forKey:@"AboutViewController"]; 

我怎樣才能獲得密鑰列表並按照與本字典相同的順序對它們進行排序?謝謝!

+3

「按照與本字典相同的順序對它們排序」沒有意義,因爲字典中的鍵沒有排序。 –

+0

詞典中的項目按應用程序要求定義的順序排列。不幸的是,所需的訂單不是按字母順序的。這是問題 – Pheepster

+2

@Pheepster不,字典沒有任何順序。 – rmaddy

回答

2

您不能,NSDictionary不保存項目的添加順序。爲此,您應該使用NSArray

下面是一個例子,如何可以我們來說:

NSArray *menuArray = @[ 
    @{ @"Title" : @"Main Menu", @"Controller" : @"EntryViewController"}, 
    @{ @"Title" : @"States Lookup", @"Controller" : @"AllStatesViewController"}, 
    @{ @"Title" : @"Favorites", @"Controller" : @"FavoritesViewController"}, 
    @{ @"Title" : @"Help", @"Controller" : @"HelpViewController"}, 
    @{ @"Title" : @"About", @"Controller" : @"AboutViewController"}, 
]; 

這種方式,您甚至可以添加在字典順序一個額外的關鍵,因此,如果您需要插入的項目,你可以再整理稍後在菜單中。

0

創建一個鍵和另一個值的數組。然後使用dictionaryWithObjects:forKeys:方法創建您的字典。那麼你不需要做任何額外的排序,因爲你有一組鍵。

正如已經指出的那樣,您無法從字典中取回有序的鍵,因此您需要使用原始鍵的數組作爲訂單信息。

+0

肯定與編輯更好。真正的問題是OP首先使用錯誤的數據結構。 – Caleb

相關問題