我将sowpods字典嵌入到AS3中的数组中,然后使用indexOf()提交搜索以验证该单词的存在。
当我加载较小的文本文件时,它似乎工作但不是更大。由于文件是在编译期间嵌入的,因此不应该有加载事件来收听吗?
代码:
package {
import flash.display.MovieClip;
public class DictionaryCheck extends MovieClip {
[Embed(source="test.txt",mimeType="application/octet-stream")] // Works fine 10 rows.
//[Embed(source="sowpods.txt",mimeType="application/octet-stream")] //Won't work too large.
private static const DictionaryFile:Class;
private static var words:Array = new DictionaryFile().toString().split("\n");
public function DictionaryCheck() {
containsWord("AARDVARKS");
}
public static function containsWord(word:String):* {
trace(words[10]); //Traces "AARDVARKS" in both versions of file
trace((words[10]) == word); // Traces true in shorter text file false in longer
trace("Returning: " + (words.indexOf(word))); // traces Returning: 10 in smaller file
if((words.indexOf(word)) > -1){
trace("Yes!"); // traces "Yes" in shorter file not in longer
}
}
}
}
答案 0 :(得分:0)
根据我的经验(我没有直接的文档来支持我),Flash无法打开非常大的文本文件。我之前导入字典时遇到了同样的问题。
我最终做的是将字典转换为ActionScript类,这样我就不必加载文件并将其解析为字典以便更好地搜索,字典已经被解析并存储在阵列。由于数组成员已经排序,我使用简单的半间隔搜索函数(http://en.wikipedia.org/wiki/Binary_search_algorithm)来确定字典是否包含该单词。
基本上,你的字典看起来像这样:
public class DictSOWPODS {
protected var parsedDictionary : Array = ["firstword", "secondword", ..., "lastword"]; // yes, this will be the hugest array initialization you've ever seen, just make sure it's sorted so you can search it fast
public function containsWord(word : String) : Boolean {
var result : Boolean = false;
// perform the actual half-interval search here (please do not keep it this way)
var indexFound : int = parsedDictionary.indexOf(word);
result = (indexFound >= 0)
// end of perform the actual half-interval search (please do not keep it this way)
return result;
}
}
使用AS类而不是文本文件,唯一丢失的是您无法在运行时更改它(除非您使用swc来保存类),但是因为您已经在文本文件中嵌入了文本文件。 swf,这应该是迄今为止最好的解决方案(无需加载和解析文件)。 同样重要的是要注意,如果你的字典真的很大,那么flash编译器最终会羞愧地爆炸。
修改强>
我已将我在http://www.isc.ro/en/commands/lists.html找到的SOWPODS转换为工人阶级,请点击此处: http://www.4shared.com/file/yQl659Bq/DictSOWPODS.html?