2015-06-12 44 views
0

我需要一個數據結構,我使用兩個鍵來查找。如何實現多鍵查找

什麼是每個選擇的贊成和反對?

  • Map[K1, Map[K2, V]]
  • Map[(K1, K2), V]

看來,後一種解決方案將需要大量的元組的實例:get(k1, k2) = m.get((k1,k2))

用例是緩存,所以比寫顯然更閱讀,並且Mapscala.collection.concurrent.Map

+0

你是否曾經用k1查找過?你是否想知道哪個密鑰對以某個第一密鑰開始? –

+0

我總是用這兩個鍵來查找 –

+0

然後在我看來,對於你的應用程序來說,「*(K1,K2)」是不可分解的(就這個數據結構而言),你應該選擇第二個選項這更明確。但是,真的,我懷疑還有更重要的決定要做,無所謂 –

回答

1

如果您預計對於每個K 1會有很多K2,但不是相反,第一個可能會更好。它會使用更多的內存,因爲你有兩個地圖結構,你會有更多的指針間接,儘管這不太可能。

後者是我會用的,因爲它更接近地表示你正在嘗試做什麼。