如果没有所有重复,我将如何编写此代码
// I have a loop which decrements m each time
// set m to the starting point
m = mid
// set f to a calculated array value
f = dict[l].substr( l * --m, l )
while (f.substr(0,x) === word && (!limit || matches.length < limit)){
matches.push(f);
// same as what was defined outside the while loop
// which seems to me like unnecessary repetition
f = dict[l].substr( l * --m, l )
}
// then I repeat it all, but incrementing m
// reset m to the starting point
m = mid
f = dict[l].substr( l * m++, l )
while (f.substr(0,x) === word && (!limit || matches.length < limit)){
matches.push(f);
f = dict[l].substr( l * m++, l )
}
有两个部分...
- 每个块包含一个重复
f = ...
部分 - 块重复,只改变增量/减量
m
编辑:代码的作用...
mid
表示按字母顺序排序的固定长度单词列表的任意入口点,没有分隔符. 我的目标是列出与集合前缀匹配的所有单词,因此必须找到任意mid
点的所有单词(通过二进制搜索方法输入)并向前查找。
编辑:更多细节......
字典看起来像这样:
dict = [
"", // offset other values to equal word length
"ai", // all length 1
"inatonuptogo", // all length 2
"catcrydogendgodhamhathit", // all length 3
"foodhackhallhandhardhatehatshavehellridewood" // all length 4
]
l
是搜索词的词长,所以dict[l]
是字典中的一排词,长度为l
。
我正在修改John Resig 的二进制搜索方法,以便它匹配前缀而不是整个单词,并返回一组结果,而不是真实值。我也在其中设置了一个限制,因为我将把它用于自动完成功能,它只需要几个返回值,而不是所有匹配项。