所以,我正在为一个项目(使用不同类型的教学游戏)编写一个小文字游戏,它基本上会改变这个词并且用户必须猜测它。 到目前为止很容易,但是同一个词不能超过1次,所以我使用一个列表来保存用过的单词,直到我发现内存问题。 还有其他办法吗?
我的代码就是这个:
String mixed = "";
while (mixed == "" || mixed == word)
{
mixed = Shuffle(word);
}
for (int i = 0; i < MainWords.used.Count; i++)
{
if (word != MainWords.used[i])
{
MainWords.used.Add(word);
palavraigual = false;
}
}
12~15个字后,程序将遇到内存不足异常。提前谢谢。
答案 0 :(得分:2)
你可以比for-loop更有效率。这也可以防止你不小心犯了错误。
String mixed = "";
while (mixed == "" || mixed == word)
{
mixed = Shuffle(word);
}
if (!MainWord.used.Contains(word))
{
MainWord.used.Add(word);
palavraigual = false;
}
public static class MainWord
{
public static HashSet<string> used;
}
以上使用Contains
方法代替循环。在这种情况下,HashSet
提供恒定时间查找;但是,即使使用List或其他标准数据结构,使用Contains
而不是循环来检查存在仍然是很好的做法。
由于上面没有循环,很难不小心添加一次这个词;然而,集合在这里有另一个有益的行为。它们不能包含重复项。如果您保留循环代码但将数据结构更改为HashSet
,则仍可以避免出现OutOfMemory问题。