C#: Ассоциативный массив

Сегодня поговорим о том, как создать ассоциативный массив на языке программирования C#…

На самом деле понятия ассоциативный массив, в языке программирования си шарп нет. Данную роль в языке выполняют списки, а точнее построенный на списках тип данных Dictionary.

Dictionary<Tkey, Tvalue> array = new Dictionary<Tkey, Tvalue>();

Где Tkey — это тип данных для ключа, а Tvalue — тип данных для значения. Так как мы говорим об ассоциативных массивах, то в качестве типа ключа будет использоваться тип string. В качестве значения же, необходимо использовать необходимый в той или иной ситуации тип.

class SomeClass
    {
        int a;
        int b;
        
        public SomeClass()
        {
            Random r = new Random();
            this.a = r.Next(1, 100);
            this.b = r.Next(1, 100);
        }

        public override string ToString()
        {
            return String.Format("{0} + {1} = {2}", this.a, this.b, this.a + this.b);
        }
    }
...
...
...
Dictionary<string, SomeClass> array = new Dictionary<string, SomeClass>();

SomeClass — это класс, который при создании генерирует два случайных числа, а при вызове метода ToString, возвращает строку простого математического действия (сложение) для сгенерированных чисел.
Для добавления новых элементов в ассоциативный массив необходимо использовать метод Add.

array.Add("One", new SomeClass());
array.Add("Two", new SomeClass());
array.Add("Three", new SomeClass());

Работать же со словарем можно как с обычным массивом:

MessageBox.Show(array["One"].ToString());
//array["One"] - это экземпляр класса SomeClass

Или можно перебрать все элементы словаря вот так:

foreach (KeyValuePair<string, SomeClass> kvp in array)
//или кратко foreach (var kvp in array)
{
   MessageBox.Show(kvp.Key + ": " + kvp.Value.ToString() );
}

Так же можно обращаться к элементам словаря, используя переменные:

string idx = "Two";
MessageBox.Show(array[idx].ToString());
Запись опубликована в рубрике C# с метками , , , , , . Добавьте в закладки постоянную ссылку.