Приветствую всех, сегодня наткнулся на одном из форумов, вопрос, в котором человек просил помочь, ему решить задание. Суть задания была в следующем, необходимо было сравнить значения из OrderedDictionary. Человек запутался, а в ответе его завели в заблуждение, увеличив код в 2 раза. Запись была старой и я не стал нарушать правила форума ответом, а решил описать его здесь как решение.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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 по индексу сравнивая их значения:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
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 но я не стал этого делать, так как у некоторых теряется суть понимания работы программы.