初始化 Windows 窗体应用程序中的集合
本文关键字:集合 应用程序 Windows 窗体 初始化 | 更新日期: 2023-09-27 17:56:42
我正在编写一个应用程序,该应用程序将检查输入到富文本框中的文本,并查看它是否包含特定列表之外的汉字(汉字)。
我目前正在为我想要允许的 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; }
}
}