初始化 Windows 窗体应用程序中的集合



我正在编写一个应用程序,该应用程序将检查输入到富文本框中的文本,并查看它是否包含特定列表之外的汉字(汉字)。

我目前正在为我

想要允许的 1000 个汉字使用字符串数组,我只是对用户输入中的每个元素执行 for 循环并检查汉字是否在列表中。如果不是,我会在所有"不允许"汉字的末尾返回一个列表。

我的问题是,现在我正在检查方法中创建字符串数组,该方法在用户点击"检查"按钮时运行,但恐怕这意味着每次操作完成时我都会创建 1000 个汉字列表。在哪里以及如何加载 1000 个汉字字符串数组,以便它始终加载到内存中?它有任何方法可以初始化预制列表(我不需要添加或删除元素 - 我几乎像字典一样使用它)。

最好将字符存储在 List 集合中,并使用 List.包含 查看某个字符是否在列表中:

var myCharacters = new List<string>();
// Fill in the list...
if (myCharacters.Contains('?'))
{
  // Do something
}

只需创建和填写"我的字符"列表一次。每当需要检查字符时,都可以调用myCharacters.Contains()方法。Contains() 方法经过优化,因此它将比您自己的实现更具性能。下面是一个完整的示例:

internal partial class MyForm : Form
{
    internal MyForm()
    {
        myCharacters.AddRange(...);
    }
    List<string> myCharacters = new List<string>();
    private void ValidateButton_Click(object sender, EventArgs e)
    {
        if (myCharacters.Contains('?'))
        {
            // Do something
        }
    }
}

不要害怕出于性能原因多次初始化数组。 1000 个项目根本不应该花费太多时间。

也就是说,如果要确保它只初始化一次,则应将列表声明为窗体的私有成员,并在构造函数中初始化列表。

public partial class Form1 : Form
{
    private List<string> kanjiList;
    public Form1()
    {
        kanjiList = new List<string>{"a", "b", "c"};
    }
}

如果要加快查找速度,可以使用HashSet<string>而不是List<string>,这将具有与Dictionary相当的查找性能。

它有任何方法可以初始化预制列表(我不需要添加或删除元素 - 我几乎像字典一样使用它)。

您可以将列表变量设置为静态。

private static readonly string[] myList = new[] { "c1", "c2" };

这样,它将加载一次,并根据需要位于内存中。

要搜索用户输入是否包含列表中的符号,可以使用以下命令:

string input = "adscads";
bool found = myList.Any(input.Contains);

(假设为 .NET 3.5 或更高版本)

您需要将列表保留在静态字段中。这样,您将在整个应用程序中拥有列表。

class MyClass
{
    private static readonly List<char> _myCharList = new List<char>() { 'x', 'y', 'z' };
    public static List<char> MyCharList
    {
        get { return _myCharList; }
    }
}

相关内容

最新更新