【问题标题】:Getting the key from a huge list of key-value pair从庞大的键值对列表中获取键
【发布时间】:2017-07-18 09:43:11
【问题描述】:

有一个巨大的物体,看起来像:

{
  "exercise": ["running","walking","gym" ........lots of words],
  "eat": ["breakfast","dinner",....... lots of words..],
  .
  .
  .
  "lots of keys": [ .... ....]
}

有大量的数据如上所示分类。在遇到像gym 这样的词时,我需要在上面的示例中找到它的类别exercise。由于数据量巨大,双循环的蛮力方法无法很好地解决问题。

这里可以应用什么算法?什么数据结构可以有效解决这个问题?

每个列表中键和项目的数量会逐渐增加,但很容易超过一百万个键和包含项目的列表。

PS:我完全可以将当前结构转换为一些相关的数据结构,然后应用所需的方法

【问题讨论】:

  • 定义“大”。也许你应该改用数据库。
  • @str 词表超百万
  • 你可以节省 CPU 时间,但它会消耗内存......就像在加载时将你的对象反转为地图。
  • @RobinCamus 不能采用这种方法

标签: javascript node.js algorithm performance data-structures


【解决方案1】:

您应该使用数据库并添加适当的索引。但是如果你真的想坚持使用这个对象,你可以使用oboe.js 来避免在搜索之前解析整个文档。它的工作方式类似于 XML 世界中的 SAX。

请参阅http://oboejs.com/examples 上的“有需要时挂机”示例

【讨论】:

    【解决方案2】:

    如果您可以将文件格式更改为 json 以外的其他格式,也许您可​​以将每个类别放在一个新行上,例如 csv 文件(不带标题),其中一行中的第一个值是类别键

    例如:

    exercise,running,walking,gym........
    eat,breakfast,dinner,.......
    

    现在,要查找包含关键字的类别:

    1. 搜索整个文件(使用 grep 之类的东西)并找到行 匹配的
    2. 在每个匹配行中查找第一个值以获得类别键

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      相关资源
      最近更新 更多