按文本框中键入的字符过滤集合中的单词,并在列表框中显示生成的单词

时间:2014-11-22 05:42:42

标签: c# dictionary listbox

我正在开发一本字典,我有大约110,000个单词。在windows_load中,我加载了排序字典中的所有单词。然后,当用户开始在文本框中键入字符时,我的程序应搜索已排序的字典,并在列表框中显示以这些字符开头的单词。

例如,当用户在文本框中输入“com”时,我希望程序在列表框中显示以“com”开头的所有单词

我想知道我是否使用了正确的数据结构,但是根据存储在其中的密钥进行搜索。

namespace StringDictionaryClass
{
public partial class MainWindow : Window
{
    SortedDictionary<string, string> sortedDic = new SortedDictionary<string, string>();

    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        LoadWords();
    }
    private void LoadWords()
    {
        int counter = 0;
        string word;
        // Read the file and display it word by word.
        string path = AppDomain.CurrentDomain.BaseDirectory;
        if (File.Exists(path + "\\Words.txt"))
        {
            System.IO.StreamReader file = new System.IO.StreamReader(path + "\\Words.txt");
            while ((word = file.ReadLine()) != null)
            {
                sortedDic.Add(word, "");
                counter++;
            }
            file.Close();
        }
    }

    private void earchBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        string key = searchBox.Text;
        foreach (KeyValuePair<string, string> dictionaryEntry in sortedDic)
        {
            if (key == dictionaryEntry.Key)
            {
                listBoxWords1.Items.Add(dictionaryEntry.Key);
            }

        }
    }
}
}

1 个答案:

答案 0 :(得分:1)

问题在于您要检查整个搜索字符串是否与字典中的键匹配,实际上您只想查找以搜索文本开头的单词。

您可以在searchBox_TextChanged处理程序中使用linq。

执行以下操作
// Get the words in the dictionary starting with the textbox text.
var matching = sortedDic.Keys.Where(x => x.StartsWith(searchText.Text)).ToList();


// Assign the values to the listbox.
listboxWords1.Items.AddRange(matching);