2016-03-30 65 views
0

我有傳入的數據流有以下值。
國家,城市,州什麼數據結構最適合嵌套值和值的計數?

伴隨着最大數量的唯一值存儲(例如50,22,12)。
我需要設計一個系統來保持上述值及其子值的出現次數。如果存在多於最大數量的值,則不是存儲實際值存儲ETC.

國家和發生
美國和發生
城市的數量和出現

在規定的時間間隔要求的數的計數是計算所有罪狀亞型計數一起。 例如所以來自這個系統的輸出值將會是。

國家A 435,國乙264,市C 300
國家B 123,國乙825,C市321
國家A 153,國家B 122,C市534

我的系統強制下列限制。
1.不能使用任何數據庫系統來存儲和檢索值。
2.速度和使用簡單性需要在內存中(因此限制存儲的最大值)
3.值以特定間隔清零。
4.這些值是嵌套的,我不能使用單獨的表來分別跟蹤3個字段。

我想過使用自定義數據結構來存儲嵌套值和它的計數。 我可以通過其他方式實現以下設計。哪些數據結構可以使用? 是否有任何現有的例子做類似的事情?

注意:這不是一項家庭作業,我正在開發自己的應用程序,而且我堅持爲此需求設計優雅的解決方案。如果您認爲這個問題對於StackOverflow來說過於籠統或不恰當,那麼在關閉或投票之前請留下備註,該論壇應該用於提出這個問題。任何積極的反饋讚賞。

僞代碼:

class Location { 
// local storage 
private val subLocationCounter = HashMap[Location, Long]; 

// method to add new location 
addLocation(Location loc) 
// method to get current count of locations 
getCounts() 
// method to get current count of locations values recursively 

} 
+0

很抱歉,但要求也不是很清楚。如果您可以顯示您想要實現的自定義數據結構的僞代碼,其他人可能可以幫助您改進或提出更好的數據結構。 –

+0

感謝您的時間和帖子@AmnaAli。對於我的自定義數據結構,我想過使用一個簡單的類位置,它具有一個Map 。我打算實例化併爲每個嵌套的國家 - >州 - >城市不斷增加位置值。'''code class Location {0}私有val subLocationCounter = HashMap [Location,Long]; //方法來添加新的位置 //方法得到的位置當前計 //方法來獲取位置值的當前計遞歸 } ''' – user300313

+0

請把你的代碼在你原來的職位,使用'編輯'。 – WhatsUp

回答

0

這是你的 「遞歸數據結構」:

import scala.collection.mutable 

case class State(var count:Int = 0, cities:mutable.Map[String, Int] = mutable.Map()) 
case class Country(var count:Int = 0, states:mutable.Map[String, State] = mutable.Map()) 

val countries = mutable.Map[String, Country]() 

List(
    ("A", "B", "C"), 
    ("A", "B", "D"), 
    ("B", "B", "C") 
).foreach { 
    case (countryName, stateName, cityName) => 
    val country = countries.getOrElseUpdate(countryName, new Country) 
    val state = country.states.getOrElseUpdate(stateName, new State) 
    country.count += 1 
    state.count += 1 
    state.cities(cityName) = state.cities.getOrElse(cityName, 0) + 1 
} 

countries("A") 
countries("B") 

結果:

res1: Country = Country(2,Map(B -> State(2,Map(D -> 1, C -> 1)))) 
res2: Country = Country(1,Map(B -> State(1,Map(C -> 1))))