我需要为一个非常大的(50GB+)ASCII 文本文件建立一个索引,这将使我能够提供对文件的快速随机读取访问(获取第 n 行,获取第 n 行中的第 n 个单词)。我决定使用List<List<long>> map
,其中map[i][j]
element 是文件中第 i 行的第 j 个单词的位置。
我将按顺序构建索引,即读取整个文件并用map.Add(new List<long>())
(新行)和map[i].Add(position)
(新词)填充索引。然后,我将使用 检索特定的单词位置map[i][j]
。
我看到的唯一问题是我无法预测行/字的总数,所以我会在每次List
重新分配时遇到 O(n),不知道如何避免这种情况。
我为该任务选择的数据结构还有其他问题吗?哪种结构可能更好?
UPD:文件在运行时不会被更改。除了我列出的内容外,没有其他方法可以检索内容。