Как сравнить значения в OrderedDictionary

Приветствую всех, сегодня наткнулся на одном из форумов, вопрос, в котором человек просил помочь, ему решить задание. Суть задания была в следующем, необходимо было сравнить значения из OrderedDictionary. Человек запутался, а в ответе его завели в заблуждение, увеличив код в 2 раза. Запись была старой и я не стал нарушать правила форума ответом, а решил описать его здесь как решение.

static void Main(string[] args)
        {
            OrderedDictionary dict1 = new OrderedDictionary();
            dict1.Add("1", "один");
            dict1.Add("2", "два");
            dict1.Add("3", "три");

            OrderedDictionary dict2 = new OrderedDictionary();
            dict2.Add("1", "один");
            dict2.Add("3", "три");
            dict2.Add("5", "пять");


            foreach (DictionaryEntry item1 in dict1)
              foreach (DictionaryEntry item2 in dict2)
                 if(item1.Value==item2.Value)
                    Console.WriteLine(item1.Value+"="+ item2.Value);
               
            Console.ReadLine();

        }

В коде программы мы создаем два словаря ключ-значения и в цикле foreach и вложенного цикла foreach производим сравнения значений двух коллекций, и выводим результат в консоль.

Пока писал статью, придумал еще один вариант решения задания, привести всю коллекцию к object и обращаться к ней не по ключу-значения, а по индексу вывести все значения. Прямого способа обращаться по индексу нет, так как в OrderedDictionary индексация производится по ключу.  И так второй способ обращения к OrderedDictionary по индексу сравнивая их значения:

static void Main(string[] args)
        {
            OrderedDictionary dict1 = new OrderedDictionary();
            dict1.Add("1", "один");
            dict1.Add("2", "два");
            dict1.Add("3", "три");

            OrderedDictionary dict2 = new OrderedDictionary();
            dict2.Add("1", "один");
            dict2.Add("3", "три");
            dict2.Add("5", "пять");

          
            object[] value1 = new object[dict1.Values.Count];
            object[] value2 = new object[dict1.Values.Count];

            dict1.Values.CopyTo(value1, 0);
            dict2.Values.CopyTo(value2, 0);


            for (int i = 0; i < dict1.Values.Count; i++)
            {
                for (int q = 0; q < dict2.Values.Count; q++)
                {
                    if (value1[i] == value2[q])
                    {
                        Console.WriteLine(value1[i] + "=" + value2[q]);

                    }
                }
            }

            Console.ReadLine();

        }

На самом деле и это можно было упростить, используя LINQ но я не стал этого делать, так как у некоторых теряется суть понимания работы программы.

Обновлено: 26.05.2018 — 17:45

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.