2013-07-30 108 views
6

我不知道什麼是落後的NSDictionary方法allKeys的決定,返回一個NSArray,而不是NSSet中,這會更有意義,因爲沒有關於返回數組的順序保證而且,關鍵是獨特的的NSDictionary allKeys返回NSArray的,而不是NSSet中

+2

異議;炒作! –

+0

這不主要是基於意見的,並且類似問題有很多先例。 –

+1

雖然沒有先例,這樣一個問題,你是不是問原來的開發商和所有答案只能是speculation.For這個問題,這是你在問NextStep自動代碼。答案很可能是「API的兼容性比你想象的要早得多」。 –

回答

1

那麼大家都在猜測......

作爲OP說,每個密鑰都是唯一的。對於數組或集合大小寫的字典代碼必須收集密鑰 - 這兩者的成本都適用。在集合情況下,每個密鑰都必須被添加到集合中,這涉及到對成員資格的(無意義的)測試,而在數組情況下,不需要進行成員資格測試 - 添加到數組的成本應該小於添加到一個集合。數組獲勝。

+0

你說NSSet插入需要O(n)重複搜索?如果蘋果如此關心NSSet的性能,爲什麼他們會在很多情況下使用它,但不是這個。 –

+0

查看源代碼顯示他們使用O(1)哈希表來處理NSSet。重複的分辨率不會造成影響。 –

+0

@JustinMeiners - 我小心翼翼地沒有提及O();-)但是你是否說你已經檢查了源或者數組,並且設置並確定了檢查的代價是* zero *並且沒有問題 - 檢查添加的代價一個數組的項目和一個集合是否相等?但是,除非代碼中有評論,否則每個人都只是在這裏玩得開心,可以爲兩種選擇提出論據 - 甚至可能是任意的。 – CRD

1

而且,除了什麼賈斯汀說,如果你其實是想你必須拿到的NSSet,然後將其轉換成一個NSArray字典鍵的列表。如果你只是想測試關鍵的存在,OTOH,你可以直接對字典,並不需要設置。

相關問題