Словари в C # - PullRequest
       17

Словари в C #

1 голос
/ 19 марта 2012

Эта программа предназначена для чтения в 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 ]

3 голосов
/ 19 марта 2012

Вы создаете новый экземпляр 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 голос
/ 19 марта 2012

В вашем цикле 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]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...