2014-04-02 30 views
0

我有一個算法,在3D空間中創建對象的實例,爲了避免雙重放置,我必須循環遍歷它們的每個實例,以確定實例是否與已有實例具有相同的ID。有沒有辦法實現像「破碎」的三維數組?

我的夢想解決方案將是一個3維數組,我可以通過x y z座標進行參照。 但是我想這是不可能的,因爲內存限制。

所以我在想,如果有什麼像一個「破」陣,我仍然可以通過數組引用[X] [Y] [Z],但就像一個列表,因此,如果特定XYZ從未宣稱,它不存在,因此不會填滿內存。

我非常感謝,如果有人能指出我正確的方向,我正在尋找什麼,甚至可以提供一些如何實現它的代碼示例。

+0

有多少個物體? –

+0

我現在這樣做的方式需要超過8k個對象的性能,所以我會說至少翻了一番,因爲我沒有低於該值的問題 – user3488765

+1

以座標元組爲關鍵字的Hashmap? –

回答

3

您是否考慮過Dictionary<>集合?如果你使用了一個有三個座標的對象作爲關鍵字(你可能已經有了一個向量類或者已經有座標的結構?),你可以快速查找一組特定的座標(接近O(1));有一個ContainsKey()方法可以告訴你在任何給定位置是否存在另一個對象。

有兩種併發症:

  1. 你不能有重複鍵,因此您必須不需要在任何給定的COORDS有多個對象。
  2. 查找的速度取決於密鑰類型的哈希函數,在您的情況下,它可能是您自己推出的3d矢量類/結構。你將需要投入一點時間來實現一個體面的哈希算法。

編輯:我應該提到,您可以使用tuple<>爲座標向量/鍵。它已經有了一個GetHash()的實現,但是你可能會發現(因爲你使用了大量的對象),用更專業的版本來覆蓋它會提高你的性能。

相關問題