Получить ключ словаря по значению списка - PullRequest
1 голос
/ 23 апреля 2020

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

Dictionary<string, List<string>> myDict = new Dictionary<string, List<string>>
{
    {"1", new List<string>{"1a", "1b"} },
    {"2", new List<string>{"2a", "2b"} },
    {"3", new List<string>{"3a", "3b"} },
};

Я уверен, что все значения внутри являются уникальными.

I хотите что-то вроде этого:

getByValueKey (строковое значение);

getByValueKey ("2a") должно возвращать "2".

Ответы [ 2 ]

3 голосов
/ 23 апреля 2020

если вы хотите использовать linq, вы можете написать:

var result = myDict.FirstOrDefault(p => p.Value.Contains(stringTofind)).Key;
2 голосов
/ 23 апреля 2020

Мне нравится ответ Френчи, но если вы ищете нестандартное решение, то:

Dictionary<string, List<string>> myDict = new Dictionary<string, List<string>>
{
    {"1", new List<string>{"1a", "1b"} },
    {"2", new List<string>{"2a", "2b"} },
    {"3", new List<string>{"3a", "3b"} },
};

string stringToFind = "2a";

string matchingKey = null;
foreach(KeyValuePair<string, List<string>> kvp in myDict)
{
    if (kvp.Value.Contains(stringToFind))
    {
        matchingKey = kvp.Key;
        break;
    }
}

if (matchingKey != null)
{
    System.Console.WriteLine("Matching Key: " + matchingKey);
}
else
{
    System.Console.WriteLine("No match found.");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...