Поиск словаря для соответствующего ключа из текстового поля С#

Я читаю файл csv, который содержит сокращения и полную версию, например LOL, Laughing Out Loud. Я создал словарь, в котором аббревиатура является ключом, а полная версия — значением.

'''

    private void btnFilter_Click(object sender, RoutedEventArgs e)
    {

        var keys = new List<string>();
        var values = new List<string>();
        using (var rd = new StreamReader("textwords.csv"))
        {
            while (!rd.EndOfStream)
            {
                var splits = rd.ReadLine().Split(',');
                keys.Add(splits[0]);
                values.Add(splits[1]);
            }
        }
        var dictionary = keys.Zip(values, (k, v) => new { Key = k, Value = v }).ToDictionary(x => x.Key, x => x.Value);


        foreach (var k in dictionary)
        {
            //
        }

        aMessage.MessageContent = txtContent.Text;
    }

'''

Я использую кнопку, которая проверяет, содержит ли текстовое поле txtContent какие-либо сокращения в тексте, и меняю его на полную версию. Итак, если текстовое поле содержит следующее. «Будет AFK» после нажатия кнопки это изменит это на «Будет вдали от клавиатуры».

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

Сможет ли кто-нибудь показать мне лучший способ сделать это, поскольку я не уверен, как это сделать с вводом из текстового поля?

Спасибо

Есть ли причина, по которой вы не используете правильный класс Dictionary? Получить ключ/значение в словаре очень просто

Steve 11.12.2020 19:51

Я новичок в WPF, поэтому я не знал, как читать .CSV прямо в словаре, и вместо этого просто решил преобразовать два списка.

MeadowBank21 11.12.2020 19:56
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
146
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если аббревиатуры правильные, т.е. вам не нужна нечеткая логика, вы можете использовать различные объекты .NET и довольно быстро искать ключи.

if (dict.ContainsKey(myKey))
{
}

Я сделал это от руки, так что это может быть dict.Keys.Contains() или что-то подобное. Дело в том, что вы можете искать в словаре напрямую, а не в цикле.

Если вам нужно выполнить более нечеткий поиск, вы можете использовать LINQ для написания запросов для очень быстрого перебора наборов объектов (и нескольких строк).

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

Ответ принят как подходящий

Вы можете просто использовать LINQ для чтения и создания объекта словаря:

 var dictionary = File.ReadAllLines(@"textwords.csv")
                  .Select(x => x.Split(",",StringSplitOptions.RemoveEmptyEntries))
                   .ToDictionary(key => key.FirstOrDefault().Trim(), 
                    value =>  value.Skip(1).FirstOrDefault().Trim());

Ах, спасибо, это гораздо лучший способ, я быстро это исправлю.

MeadowBank21 11.12.2020 20:32

Другие вопросы по теме