Поиск строки для значения словаря, а затем заменить соответствующее значение ключом словаря? - PullRequest
0 голосов
/ 22 апреля 2020

Итак, у меня есть словарь с ключами, которые являются сокращенными версиями адресных сокращений (которые являются моими значениями в этом словаре). Мне нужно найти строку, если она содержит значение в моем словаре, а затем заменить значение в строке на значение ключа из словаря. Например:

Dictionary<string, string> addresses = new Dictionary<string, string>(){{"BLVD","BOULEVARD"}};
var address = "405 DAVIS BOULEVARD";

Итак, в приведенном выше примере я бы хотел найти «BOULEVARD» в качестве совпадения, а затем заменить его на «BLVD». Таким образом, новый адрес будет «405 DAVIS BLVD». Приведенный ниже код - это то, что у меня есть, но я не уверен, как выполнить замену, используя соответствующее значение ключа. Любые советы будут с благодарностью, спасибо!

foreach(var value in addresses.Values)
{
     if(address.ToUpper().Contains(value))
     {
         //this is where i get stuck with how to replace with the appropriate key of the dictionary
     }
}




Ответы [ 3 ]

1 голос
/ 22 апреля 2020

Самое простое решение - инвертировать ваш ключ и значение, Dictionary<string, string> addresses = new Dictionary<string, string>(){"BOULEVARD","BLVD"}; Затем вы можете заменить, просто подняв ключ: address = address.Replace(key, addresses[key]);

0 голосов
/ 22 апреля 2020

Предположительно, вы хотите заменить все строки, если они есть в словаре, их аналогами. Это можно сделать простым l oop:

Dictionary<string, string> addresses = new Dictionary<string, string>() 
    { { "BLVD", "BOULEVARD" } };

var address = "405 DAVIS BOULEVARD";

// Replace all 'Value' items found with the 'Key' string
foreach(var item in addresses)
{
    address.Replace(item.Value, item.Key);
}

Если вы хотите выполнить замену без учета регистра, RegEx также является хорошим способом для go :

foreach(var item in addresses)
{
    address = Regex.Replace(address, item.Value, item.Key, RegexOptions.IgnoreCase);
}
0 голосов
/ 22 апреля 2020

Сначала мы можем найти пару ключ-значение и заменить на:

Dictionary<string, string> addresses = new Dictionary<string, string>() { { "BLVD", "BOULEVARD" } };
var address = "405 DAVIS BOULEVARD";

KeyValuePair<string,string> keyValue =
    addresses.FirstOrDefault((x) => address.ToUpper().Contains(x.Value));

if(keyValue.Value != null)
{
    address = address.ToUpper().Replace(keyValue.Value, keyValue.Key);
}

Примечание: пожалуйста, добавьте using System.Linq; (если он не существует) для метода расширения FirstOrDefault

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