2011-05-15 26 views
1

我正在編寫一個應用程序,它將檢查輸入到富文本框中的文本,並查看它是否包含特定列表之外的漢字(中文字符)。在Windows窗體應用程序中初始化集合

我目前正在使用1000字符串的字符串數組,我想允許,我只是在用戶輸入中的每個元素做一個for循環,並檢查是否在列表中的漢字是否在列表中。如果不是,我會在所有'不允許'的漢字末尾返回一個列表。

我的問題是,現在我創建了檢查方法內的字符串數組,當用戶點擊'檢查'按鈕時運行,但恐怕這意味着我每次操作時都會創建1000個漢字列表已經完成了。在哪裏以及如何加載1000漢字字符串數組,以便它始終加載到內存中?它有任何方法來初始化預製列表(我不需要添加或刪除元素 - 我幾乎像字典一樣使用它)。

+0

Windows應用程序 – aevanko 2011-05-15 06:04:07

回答

1

你存儲在列表的收集和使用List.Contains字符,看是否有字符在名單上的更好:

var myCharacters = new List<string>(); 
// Fill in the list... 

if (myCharacters.Contains('?')) 
{ 
    // Do something 
} 

創建和「myCharacters名單填寫一次。每當你需要檢查一個字符時調用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 
     } 
    } 
} 
+0

這是一個好主意,謝謝。我要在Windows窗體應用程序中初始化這個列表,以便它始終加載到Memeory中? – aevanko 2011-05-15 05:58:30

+0

@Issun,新增樣本。 – 2011-05-15 06:02:23

0

出於性能原因不要害怕初始化陣列多次。 1000件物品應該不會花費太多時間。

這就是說,如果你想確保它只是初始化,你應該聲明列表作爲你的窗體的私有成員,並在構造函數中初始化列表。

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

如果你想加快查找可以使用HashSet<string>代替List<string>,這將有查找性能堪比Dictionary

+0

謝謝!我會給它一個! – aevanko 2011-05-15 06:01:35

0

這有什麼辦法,只是初始化預先製作的列表(我有沒有必要添加或刪除元素 - 我使用它幾乎像一本字典)。

你可以讓你的列表變量爲靜態的。

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

這樣它將被加載一次,並將坐在內存中,如你所願。

要搜索,如果用戶輸入包含從列表中使用的符號可以使用此:

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

(假設.NET 3.5或更高版本)

0

你需要保持在一個靜態字段列表。這樣你就可以在整個應用程序中獲得清單。

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

    } 
}