C#中的词典
本文关键字: | 更新日期: 2023-09-27 18:28:21
该程序旨在读取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");
}
}
您在每个循环周期创建一个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);
在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]);
}
}