Как найти значение словаря внутри словаря в C#? - PullRequest
0 голосов
/ 28 мая 2020

У меня есть transitionMap: Dictionary<Dictionary<int, char>, int> transitionMap;

И еще есть dictionary: Dictionary<int, char> dictionary = new Dictionary<int, char> {{0, 'a'}};.

Как мне получить значение внутри transitionMap, которое соответствует dictionary1.

Вот что пробовал:

        Dictionary<int, char> dictionary = new Dictionary<int, char> {{stateNum, symbol}};

        if (this.transitionMap.ContainsKey(dictionary))
        {
            int nextState = this.transitionMap[dictionary];
            Console.WriteLine("nextstate {0}", nextState);
        } 

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

Если вы хотите сравнить два словаря на равенство, то наличие «супер-словаря» вам никак не поможет. Вам придется вручную сравнивать все элементы в двух словарях.

Сначала сравните количество элементов. Затем запустите al oop через один словарь и с помощью ключа найдите значение во втором словаре и, если существует, сравните два значения.

1 голос
/ 28 мая 2020

Решение с Linq:

class Program
{
    static void Main(string[] args)
    {
        var transitionMap = new Dictionary<Dictionary<int, char>, int>();
        var dictionary = new Dictionary<int, char> { { stateNum, symbol } };

        ...

        var found = transitionMap.Keys.FirstOrDefault(d => Equal(d, dictionary));
        if(found == null)
        {
            int nextState = transitionMap[found];
            Console.WriteLine("nextstate {0}", nextState);
        }
    }

    static bool Equal(Dictionary<int, char> a, Dictionary<int, char> b)
    {
        return a.Count == b.Count && a.All(akv => b.TryGetValue(akv.Key, out char bval) && akv.Value == bval);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...