Приветствую всех, сегодня наткнулся на одном из форумов, вопрос, в котором человек просил помочь, ему решить задание. Суть задания была в следующем, необходимо было сравнить значения из 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 но я не стал этого делать, так как у некоторых теряется суть понимания работы программы.
