有没有办法在 Javascript 中对文本文件中的特定键进行基于磁盘的二进制搜索?文本文件太大而无法加载到内存中,但按键值排序。特别是,我正在寻找一种在 Javascript中模仿 Perl 的Search::Dict功能的方法。
例如,如果我有一个文件 foo.txt:
a 1
b 10
c 5
z 4
look(c,foo.txt)
c 5
应该通过执行二进制搜索而不是线性遍历文件来返回行' '。
有没有办法在 Javascript 中对文本文件中的特定键进行基于磁盘的二进制搜索?文本文件太大而无法加载到内存中,但按键值排序。特别是,我正在寻找一种在 Javascript中模仿 Perl 的Search::Dict功能的方法。
例如,如果我有一个文件 foo.txt:
a 1
b 10
c 5
z 4
look(c,foo.txt)
c 5
应该通过执行二进制搜索而不是线性遍历文件来返回行' '。
并非如此,只有当您可以识别记录开始时,二进制搜索才真正可行。你似乎有可变长度的记录,所以除非你创建一个行起始偏移量数组,否则它不会工作。
正如 Nikhil 在评论中正确指出的那样,一种方法是根据文件大小对文件进行二进制分割,然后从那里找到最近的行。这仍然是相对有效的(即,比顺序搜索要好得多)。
我不知道 Javascript,但是如果你可以进行随机搜索,你可以通过搜索到当前块的中点(以字节为单位)进行二进制搜索,然后继续前进,直到你消耗了一个换行符,只要您“知道”您的密钥针对换行符。
但是,在某些情况下您需要向后行进,因此您可能会在了解文件缓冲的情况下进行搜索,这样后退步骤不会很昂贵。
如果您不处理 ASCII 文件,我想这可能会有点麻烦。