如果有人回答,我会事先道歉,但我看了一眼,找不到我想要的东西。
我正在寻找在AS3中搜索8个字符串的最佳方法,看它是否包含一个或多个单词。我已经有一个加载到Flash中的单词词典,有......
[Embed(source = "../f-16.txt",mimeType = "application/octet-stream")]
private static const wordFile:Class;
var words:Array = new wordFile().toString().split("\n");
我正在考虑将每个起始字母进一步拆分为26个数组,并且可能将这些数组分成不同长度字的数组(因此所有8个以a开头的字母都在一起,依此类推)。 / p>
我需要做的是在AS3中搜索一个8字符串,以查看它是否包含字典数组中的任何单词或单词。下面是一些示例字符串以及我需要返回的内容......
等等。我能看到的问题是,单词可以从字符串中的任何一点开始,这使问题变得复杂。
在as3中做到这一点的最佳(最快)方法是什么?
感谢您的帮助。
答案 0 :(得分:3)
我......
我有点醉了。 (这可能会被SO模型删除。)(编辑:我很醉。)
但是,对于您的具体用例......
我正在寻找在AS3中搜索8个char字符串的最佳方法 如果它包含一个或多个单词。我已经有了一本单词词典 加载到Flash中,用...
我正在考虑将其进一步拆分为26个阵列 起始字母,而不是那些数组到数组 不同长度的单词(因此所有以a开头的8个字母单词都是 在一起,等等。
我可能会建议一个树形结构 - 这意味着你有26 ^ 8个字母组合。我认为这将是一个比数组查找更快的搜索,因为你不必遍历数组来找到你的值。
字符串的每个字符都是树的一层。理想情况下,在达到最大分支之前,您将能够很好地停止。无论数字是多少,你的最大查找次数都是26 ^ 8。
关于这种方法的最好的事情是,使用树结构,沿着树的递归在编写代码方面应该是微不足道的。您只需存储字典单词。因此,如果有人键入“cbyir”,您将知道(通过第二个字符)输入与字典单词不匹配。 (除非有一个单词以CB开头。哦韦伯斯特,你在哪里?)
这样做的另一个好处是 - 您可以轻松检查字符串的每个字符。如果进行中的角色不匹配(或第三个,或第四个...),您可以放弃该搜索并提前退出;你的功能不需要天真。
再一次,我喝醉了。不过,祝你好运! :-D如果您有任何问题,请发表评论,因为我知道这可能不太清楚。
编辑:我回到了这个答案,因为我正在思考它。可能的实现可以使用AS3 Dictionary类;你可以让Dictionaries指向Dictionaries。这将比数组查找快得多,因为字典的查找时间为O(1)。这意味着您的树查找真的非常快 - 迭代次数将等于单词中的字母数,而不是单词中可能的字母组合数。给这样的东西一个镜头;我很确定它会起作用。如果您有任何实施问题,请与我们联系。
答案 1 :(得分:0)
这样的事情怎么样:
public class WordFinder {
public var searchFor:Array = [];
public function search(value:String):Array {
var result:Array=[];
for each (var word:String in searchFor) {
if (value.indexOf(word) >= 0) {
result.push(word);
}
}
}
}
答案 2 :(得分:0)
这是您需要做的事情:
public function verifyWord(word : String, wordList : Array) : Array
{
var resultArray : Array = [];
for(var i : int = 0; i < word.length; i++)
{
for(var j : int = word.length; j > i; j--)
{
var brokenWord : String = word.substring(i, j);
if(wordList.indexOf(brokenWord) >= 0) // We are performing a search on a array, so its O(n), super slow, change this for something good
{
resultArray.push(brokenWord);
}
}
}
return resultArray;
}
基本上:
对于每个拆分的单词,您需要验证字典是否包含它们(当前使用数组搜索,即SLOW);
要提高性能,您可以将字典存储为哈希表,也可以使用半间隔或更智能的搜索算法来检查单词是否在字典中(请参阅此AS3: Large text files with indexOf() on an array)< / p>