【问题标题】:Most efficient way to compile unique values in a massive text file?在大量文本文件中编译唯一值的最有效方法是什么?
【发布时间】:2012-03-06 18:33:37
【问题描述】:

我有一组大型文本文件,总共包含大约 300 万行。

我想要做的是从每一行的给定列中提取一个值并将其添加到内存中的数组中。如果该值已经存在于数组中,则忽略它。

我假设最快的方法不是:

  • 读取一个值
  • 如果存在(使用数组的原生索引或 what-have-you 方法),则将其推送到数组中

我应该按字母顺序插入值以加快匹配/搜索速度吗?

或者我应该保留多个数组...例如,每个字母对应一个数组?

【问题讨论】:

    标签: ruby arrays algorithm sorting


    【解决方案1】:

    使用Set:

    Set 实现了一组无重复的无序值。这是 Array 的直观互操作设施和 Hash 的快速查找的混合体。

    示例用法:

    require 'set'
    
    set = Set.new
    set << 1 << 2 << 3  # => #<Set: {1, 2, 3}>
    set << 2            # => #<Set: {1, 2, 3}>
    

    【讨论】:

      【解决方案2】:

      您可以将值作为键添加到哈希映射中,这将自动删除重复项。您甚至可以计算每个值以这种方式出现的次数(使用哈希值)。

      【讨论】:

      • 假设您手头没有合适的数据结构。 (我对 Ruby 不是很了解,也许真的没有这样的东西触手可及。我只是说这种方法使用哈希表模拟了一个集合。)
      • @delnan 实际上 Ruby 确实有一个 Set 数据结构,请参阅我的回答 :)
      • 是的,哈希是可能的。随着键的数量大大增加,这会显着变慢吗?计数实例有用但不是必需的,因此效率是重点。
      • 你是对的,你当然也可以使用一套。但是,计算出现次数变得有点困难。
      • @Zando,如果所需的内存变得非常大并且机器开始交换或类似的东西,您应该只会看到显着的减速。
      猜你喜欢
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 2013-03-23
      • 2014-09-10
      相关资源
      最近更新 更多