【问题标题】:Data Structure for building/demolition history建筑/拆除历史的数据结构
【发布时间】:2018-05-11 17:55:22
【问题描述】:

问题来了: 我必须创建一个程序来模拟一个城市,尤其是它的建筑物,以确定其天际线的平均高度和其他值。我的问题是选择数据结构:我需要一些东西来计算不同年份的这些值:例如,用户可以要求 2016 年的天际线值,然后要求 2020 年的最高建筑物。

每个建筑物都有一个字符串作为钥匙,但一旦它们被拆除,同样的钥匙又可以使用。

这是大学的一个项目,所以我只是想给点小费;我需要知道比“如何”更多的“是什么”和“为什么”。

我使用 Java。

谢谢。

【问题讨论】:

  • 为什么不用字典呢?您将能够按照您认为合适的方式构建和安排结构。它类似于 JSON 对象,或者您可以集成 JSON 库并直接使用 JSON
  • 使用数据库,这就是他们的目的。如果您要使用钥匙,那么它应该是建筑物的地址。如果建筑物被拆除,则将一条新记录插入到反映该事实的 DB 表中。如果在同一地址内建造了新建筑物或对现有建筑物进行了修改,则将另一条记录插入到 DB 表中。当然,年份将是表字段之一。当需要信息时,只需启动特定的数据库查询即可。
  • 由于这个项目的限制,我不能使用数据库。

标签: java data-structures history


【解决方案1】:

您正在寻找某种多级词典的地图。 您可以有一个 2 级字典,例如 { 2018:{height1, height2}, 2002:{} ... } 其中每个内部字典都是当年所有建筑物的高度(这是关键)。此外,字典速度很快(尽管您正在用性能换取空间)。

希望这会有所帮助!

【讨论】:

  • 好的,我明白了。即使我有更多的参数(例如与河流的距离,基地的宽度,ecc.),概念是否相同?
  • 是的,概念是一样的。如果您要为每个建筑物存储更多信息,将这些“建筑物”中的每一个转换为对象并将它们存储在字典中可能会很有用。结果,您将拥有一个带有“构建”对象数组的字典(其中键是年份)。然后,您可以遍历数组,然后从中获取您需要的任何日期。您的字典可能如下所示:{ 2018: [b1, b2, b2], ..., 2054: [b1, b7, b9]... }
【解决方案2】:

如果构建键是唯一的,您将拥有这样的类:

class Building
    Key
    Name
    Height
    YearBuilt
    YearDemolished

您可以通过对建筑物集合的简单循环来解决您的问题:

for each building
    if (building.yearBuilt <= year && building.yearDemolished >= year)
    {
        // the building was standing during that year
    }

如果密钥可以重复使用,您仍然需要保留历史信息。如果你把它和建筑物放在一起,那么你有类似的东西:

class HistoricalInfo
    Name
    Height
    YearBuilt
    YearDemolished

class Building
    Key
    HistoricalInfo[]  // some collection (array, list, etc.)

你的循环变得有点复杂:

for each building
    for each building.historyInfo
        if (historyInfo.YearBuilt <= year && historyInfo.YearDemolished >= year)
        {
            // this instance of the key was standing during that year
        }

【讨论】:

    猜你喜欢
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2017-08-08
    • 2019-06-27
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多