C#中的字典

时间:2012-03-19 18:53:45

标签: c# dictionary

此程序用于读取csv文件并从中创建字典,然后用于将输入的单词翻译成文本框(txtINPUT)并将结果输出到另一个文本框(txtOutput)。

该程序不会翻译任何内容并始终输出“未找到翻译”。 我之前从未使用过字典类,因此我不知道问题的来源。

感谢您提供任何帮助。

    Dictionary<string, string> dictionary; 

    private void CreateDictionary()
    {
        //Load file
        List<string> list = new List<string>();
        using (StreamReader reader = new StreamReader("dictionarylist.csv"))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                //Add to dictionary
                dictionary = new Dictionary<string, string>();
                string[] split = line.Split(',');
                dictionary.Add(split[0], split[1]);
            }
        }
    }
        private void btnTranslate_Click(object sender, EventArgs e)
    {
        CreateDictionary();

        string outputString = null;
        if (dictionary.TryGetValue(txtInput.Text, out outputString))
        {
            txtOutput.Text = outputString; 
        }
        else
        {
            txtOutput.Text = ("No translation found");
        }

    }

2 个答案:

答案 0 :(得分:3)

您正在为每个循环周期创建一个新的Dictionary实例,每次读取一行时基本上都会覆盖它。将此行移出循环:

// Instantiate a dictionary
var map = new Dictionary<string, string>();

另外为什么不加载字典一次,你加载每个按钮点击,这是不高效的。

>=.NET 3)使用LINQ ToDictionary()

usign System.Linq;
var map = File.ReadAllLines()
              .Select(l =>
               {
                    var pair = l.Split(',');
                    return new { First = pair[0], Second = pair[1] }
               })
              .ToDictionary(k => k.First, v => v.Second);

答案 1 :(得分:1)

在你的while循环中,你创建一个新词典每一遍!

您想要创建一个字典,并将所有条目添加到该字典:

while ((line = reader.ReadLine()) != null)
{
    //Add to dictionary
    dictionary = new Dictionary<string, string>();  /* DON'T CREATE NEW DICTIONARIES */
    string[] split = line.Split(',');
    dictionary.Add(split[0], split[1]);
}

你应该这样做:

List<string> list = new List<string>();
dictionary = new Dictionary<string, string>();  /* CREATE ONE DICTIONARY */
using (StreamReader reader = new StreamReader("dictionarylist.csv"))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        string[] split = line.Split(',');
        dictionary.Add(split[0], split[1]);
    }
}