在大量文本文件中编译唯一值的最有效方法?

时间:2012-03-06 18:33:38

标签: ruby arrays algorithm sorting

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

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

我假设最快的方式不是:

  • 读取值
  • 如果存在(使用数组的本机索引或有什么方法),则将其推送到数组

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

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

2 个答案:

答案 0 :(得分:4)

使用Set

  

Set实现无序值的集合,没有重复项。这是Array直观的互操作设施和Hash快速查找的混合体。

使用示例:

require 'set'

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

答案 1 :(得分:2)

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