Список строк, хранящихся в виде значений в словаре C # - PullRequest
0 голосов
/ 22 мая 2018

У меня есть среда тестирования, которую необходимо обновить, чтобы включить тестирование на испанском языке.У меня есть файл CSV, который содержит метку поля, текст на английском языке и текст на испанском языке.Я решил использовать словарь для хранения метки поля в качестве ключа, и значения будут представлять собой список строк для текста на испанском и английском языках.

   private List<string> ReadTranslationCsv()
    {
        var pathToCSV = @"C:\Location";
        Dictionary<string, List<string>> translations = new Dictionary<string, List<string>>();
        string label, englishText, spanishText;
        using (TextReader fileReader = File.OpenText(pathToCSV))
        {
            var csv = new CsvReader(fileReader);
            csv.Configuration.HasHeaderRecord = false;

            while (csv.Read())
            {
                for (int i = 0; csv.TryGetField<string>(i, out label);)
                {
                    List<string> Spanglish = new List<string>();

                    csv.TryGetField<string>(i + 1, out englishText);
                    Spanglish.Add(englishText);
                    csv.TryGetField<string>(i + 2, out spanishText);
                    Spanglish.Add(spanishText);

                    if (label != "")
                    {
                        translations.Add(label, Spanglish);
                    }   

                    i = i + 3;
                }
            }
        }
    }

Я хочу иметь возможность поиска в спискезначений, чтобы увидеть, если что-нибудь соответствует какой-либо строке текста.Я не уверен, как искать списки, которые находятся в словаре, ни один из методов или свойств по умолчанию не работает.

Я использую приведенный ниже код, но это вернет мне логическое значение, а это не то, что мне нужно, мне нужно значение списка, соответствующее elementWithText

    public void GivenElementMatches(string elementWithText)
            {
                if (Config.Language == "Spanish")
                {
                    var list = new List<string> { elementWithText };//must create list in order to pass text to any translations methods
                    Hooks.translations.ContainsValue(list); // Even though the labels are the key, I need to search for the english text which is index 1 of the list and all values should be returned

                }
//TODO
}

1 Ответ

0 голосов
/ 22 мая 2018

Мое предложение будет использовать словарь с классом, который вы создаете, внутри этого класса вы можете иметь функцию сравнения.

Преимущество этого метода в том, что вы можете добавить больше языковых эквивалентов позже и вам нужно только изменить свою модель.

Обратите внимание, этот код не завершен, и вам придется проверять ошибки и изменятьон подходит.

Dictionary <string, LangEquivalents> model;

public KeyValuePair<string, LangEquivalents> findField(string input) 
{
    return model.First(x=>x.Value.Comparison(input));
}

Вы также можете сделать его сопоставимым типом объекта и просто использовать model.First(x=>x.Value == input));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...