2012-04-28 60 views
0

說我有一個「節點」實例的集合。整數屬性調用zIndex將用於對它們進行分組。ObjC:最好使用這個(zBuffer)的NSArray或NSDictionnary?

哪些將它們存儲在優點/缺點: 1)陣列 2)陣列

在僞碼的辭典的陣列,我會形容這樣預期的結果:

zBuffer[100] = [node1, node 2]; 
zBuffer[105] = [playerNode, collectable1]; 
zBuffer[110] = [foreground1, foreground2]; 

我想知道什麼zBuffers應該是; NSArrays是否只能用於順序讀/寫?像不使用非連續索引?

我試圖與一個NSMutableArray:

[zBuffer objectAtIndex:zOrder] 

但是,如果陣列包含針對索引沒有數據(像外的結合的除外)失敗。

感謝您的建議! J

回答

2

就我所見,您的一個要求是您用來訪問zBuffer的索引不是連續的(100,105,100)。在這種情況下,我不會爲此使用數組,因爲可以使用數組的索引必須小於數組元素的count(如果有3個元素,則索引範圍爲0到2)。

相反,我會使用NSMutableDictionary,您可以在其中使用zIndex鍵作爲您要查找的對象組的「名稱」。

此建議沒有考慮您可能具有的任何其他要求,特別是有關複雜性以及您要在節點集合中執行的操作類型(而不是通過zIndex訪問它們)。

+0

嘿謝謝您的詳細解答。這正是我所需要的,因爲這個zBuffer的目的是追蹤「批處理節點」,以便在添加新節點時在運行時獲得正確的節點。 – Jem 2012-04-28 09:25:33

1

你實際上可以提供兩者。它看起來像你想要的是一個稀疏數組:所以你通過索引來查找對象,但是允許在某個索引處沒有對象。所以你可以做到這一點。

我會通過創建一個NSMutableArray子類來實現the primitive methods documented。在內部,您的子類將使用NSMutableDictionary進行存儲,數字(「填充」索引)作爲關鍵字。 -objectAtIndex:返回帶有該號碼的對象作爲其鍵或nil,如果該點在該數組爲空。

有在此使用數組合同,它是由你來決定如何解決一些模糊之處:

  • 確實count回報1+(使用指數最高),或對象的數量數組?
  • 枚舉器和快速枚舉模式永遠不會看到nil,所以你需要想出一個枚舉器總是返回一個對象(但讓我看看它是什麼索引)如果你想讓你的類的用戶通過枚舉器遍歷陣列。
  • 您將無法使用+arrayWithObjects: (id) firstObject,...初始化模式初始化它,因爲它們使用nil作爲標記。
+0

嘿,非常有趣的想法。我會保持這種喜好。在這種情況下,我將使用NSMutableDictionnary! – Jem 2012-04-28 09:28:31

相關問題