字符串列表的替代方法,以避免内存问题

时间:2014-04-16 17:57:12

标签: c# list

所以,我正在为一个项目(使用不同类型的教学游戏)编写一个小文字游戏,它基本上会改变这个词并且用户必须猜测它。 到目前为止很容易,但是同一个词不能超过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个字后,程序将遇到内存不足异常。提前谢谢。

1 个答案:

答案 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问题。