2012-03-21 45 views
5

我有這樣的代碼停止的NSDictionary

NSDictionary *tempDict = [NSDictionary dictionaryWithObjects: 
[NSArray arrayWithObjects:@"authorId","authorName","authorDescription",@"image",nil] forKeys: 
[NSArray arrayWithObjects:@"id",@"name",@"desc",@"image",nil]]; 
NSLog(@"%@",[tempDict description]); 

和輸出

desc = authorDescription; 

id = authorId; 

image = image; 

name = authorName; 

您將看到該詞典由鍵排序,按字母順序,出於某種原因。這對我來說並不好,因爲我需要將這本字典添加到plist中,並且這個plist已經有一些字典與未排序的鍵。那麼我怎樣才能避免這種排序呢?

回答

6

的排序是由於[NSDictionary description],用於通過NSLog。這不是NSDictionary的基本特徵。如果您通過快速枚舉或[dictionary allKeys]訪問密鑰,則不會發現它已排序。

但是對於你的根本問題,如果你想要的是「未排序」(隨機),那麼「排序」只是可能的隨機序列之一。如果你真的想要未排序,那麼排序應該無關緊要,因爲它是一個子集。

如果排序很重要,那麼您並不是指「未排序」,而是指「其他排序順序,如插入順序。」如果您需要以某種方式對NSDictionary進行排序,則需要將其轉換爲NSArray

+0

我正在使用'[dataDict allKeys]',但仍然得到我的密鑰隨機順序。 – upendra 2016-09-29 19:07:31

+0

@upendra我不明白這個問題。沒有爲allKeys承諾的訂單。 – 2016-09-29 22:04:09

2

它沒有排序。它以任意順序顯示。添加更多項目,您可能會看到訂單更改。

(這是可能的,內部的存儲,對一些瘋狂的原因,其實排序,但沒有什麼你可以做的。)

+0

好的,我正在用plist寫這個字典,打開plist,並且這個字典按照鍵(或者以任意的順序排列 - 沒關係)在plist中排序。這是不可接受的我 – user1248568 2012-03-21 02:17:50

+0

正如lulius所說,NSDictionary不排序它的內容。 NSDictionary基本上是一個哈希表。你看到的只是它的打印結果。 如果將tempDict添加到另一個字典中,將添加對象/密鑰對,並且它們將以不特定的順序(即NSDictionary的內部結構)存儲。 或者,您可以嘗試使用您的plist初始化NSLogging您的其他NSDictionary,即使其數據未排序,其打印輸出結果排序得太對了嗎? – nacho4d 2012-03-21 02:34:23