2014-02-28 92 views
1

我正在循環包含名爲1,2,3等的字典的NSDictionary。我遇到的問題是,雖然通過它們循環他們不保留順序的順序。循環時有沒有辦法維護數字順序?謝謝。NSDictionary循環次序

代碼:

NSDictionary *theDict = [thePreviousKey objectForKey:@"stayInLine"]; 

    for(NSString *key in theDict) { 

    [self doThis:key]; 

    // expected result (do 1, 2, 3, etc.) 
    // actual result (1, 3, 2, etc.) 

    } 

的plist:

<dict> 
    <key>randomStuff</key> 
    <dict> 
     <key>specificStuff</key> 
     <dict> 
      <key>stayInLine</key> 
      <dict> 
       <key>1</key> 
       <dict> 
        <key>thing</key> 
        <data> 
        data== 
        </data> 
       </dict> 
       <key>2</key> 
        <dict> 
        <key>thing</key> 
        <data> 
        data== 
        </data> 
       </dict> 
      </dict> 
     </dict> 
    </dict> 
</dict> 

回答

6

NSDictionary不保持鍵的有序列表。枚舉字典中的鍵時,枚舉鍵的順序未定義。

解決的辦法是先自己排序鍵。這樣的事情:

NSArray *keys = [[theDict allKeys] sortedArrayUsingSelector:@selector(compare:)]; 
for (NSString *key in keys) { 
    [self doThis:key]; 
} 
+0

它並沒有真正發生在我身上的鍵實際上是如何枚舉的;這完全是隨機的嗎? – ctfd

+0

@ctfd:它不是數學上的隨機數,但順序也不可靠。最好把它當作隨機的。 – Chuck