Я читаю файл 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.
Сможет ли кто-нибудь показать мне лучший способ сделать это, поскольку я не уверен, как это сделать с вводом из текстового поля?
Спасибо
Я новичок в WPF, поэтому я не знал, как читать .CSV прямо в словаре, и вместо этого просто решил преобразовать два списка.
Если аббревиатуры правильные, т.е. вам не нужна нечеткая логика, вы можете использовать различные объекты .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());
Ах, спасибо, это гораздо лучший способ, я быстро это исправлю.
Есть ли причина, по которой вы не используете правильный класс Dictionary? Получить ключ/значение в словаре очень просто