2014-10-08 89 views
0

我有一些數據很好地適用於嵌套的分類結構。起初,我使用嵌套地圖來表示它,但我想也許只是使用包含每個類別關鍵字的元組索引到的扁平結構會更節省空間。扁平化對象的缺點?

例如,假設我有數據狗,貓,樹,金,銀 首先,讓我們說,我有以下結構,其中的箭頭表示在地圖中的鍵值對

animal -> {barks -> "dog" 
      purrs -> "cat"} 
plant -> {rooted -> "tree"} 
mineral -> {golden -> "gold" 
      silvery -> "silver"} 

但現在,我想爲什麼不只是有

['animal','barks'] -> 'dog' 
['animal', 'purrs'] -> 'cat' 
['plant', 'rooted'] -> 'tree' 
['mineral','golden'] -> 'gold 
['mineral', 'silvery'] -> 'silver' 

都在同一個平面物體?

這是否有任何性能,風格或其他缺點?

我能想到的一點是,在這個例子中,很難得到所有的礦物質或所有的動物 - 我必須通過所有關鍵字進行線性搜索才能收集到。還有別的事嗎?

+0

任何數據結構設計的主要目標是滿足它所需的查詢需求。我們無法真正幫助您決定哪種方法最好,而無需知道需要進行哪種類型的查詢,每種查詢的頻率,數據集的可能數量以及對於哪種類型的查詢性能有多重要。如果數據集較小,性能對於任何特定查詢都不是至關重要的,那麼選擇最簡單的方法來實現這一點很可能會花費最少的時間進行編碼並且複雜性最低。除此之外的決定是針對特定需求進行優化。 – jfriend00 2014-10-08 19:20:41

+0

@ jfriend00感謝您的回覆。我應該更清楚了 - 把它當作一個給定的東西,我想知道是否有一些毛病。 – aabeshou 2014-10-08 19:41:38

回答

0

嗯,首先,直到ES6成爲廣泛的支持,您將無法使用數組作爲對象鍵,那麼你就必須再包括間接的一些其他級別存儲正確的事情,也許是這樣的:

{ 
    'animal~barks': 'dog', 
    'animal~purrs': 'cat', 
    ... 
} 

這真的使編碼更難。

你也會增加你的內存消耗,大概是通過重複例如'動物'的大集合。

所以我覺得有幾個罷工反對這個。

+0

那麼這個問題肯定會引起人們的注意。謝謝! – aabeshou 2014-10-08 19:42:32