2016-03-30 25 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))))