C#:
Использование ассоциативных массивов
Как это делать:
В C# с ассоциативными массивами работают с использованием класса Dictionary<TKey, TValue>
. Вот быстрый пример для начала:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// Создание словаря
Dictionary<string, int> fruitBasket = new Dictionary<string, int>();
// Добавление пар ключ-значение
fruitBasket.Add("Apples", 5);
fruitBasket.Add("Oranges", 10);
// Доступ к значению с использованием его ключа
Console.WriteLine("Apples: " + fruitBasket["Apples"]);
// Обновление значения
fruitBasket["Apples"] = 7;
Console.WriteLine("Updated Apples: " + fruitBasket["Apples"]);
// Удаление пары ключ-значение
fruitBasket.Remove("Oranges");
// Итерация по словарю
foreach (var pair in fruitBasket)
{
Console.WriteLine(pair.Key + ": " + pair.Value);
}
}
}
Пример вывода:
Apples: 5
Updated Apples: 7
Apples: 7
В этом примере показано создание словаря, добавление, доступ, обновление и удаление элементов, а также итерация по нему.
Подробнее
Концепция ассоциативных массивов восходит к их использованию в языках сценариев, таких как Perl и PHP, где они предлагают гибкость в управлении коллекциями данных. В C#, Dictionary<TKey, TValue>
является фактической реализацией, введенной в .NET Framework 2.0. Он хранит данные в хеш-таблице, обеспечивая эффективные поиски, добавления и удаления.
Однако стоит отметить, что хотя словари невероятно универсальны, они могут не всегда быть вашим лучшим выбором. Для поддержания упорядоченных коллекций вы можете рассмотреть SortedDictionary<TKey, TValue>
или SortedList<TKey, TValue>
, которые предлагают сортированный порядок за счет более медленных операций вставки и удаления. Для сценариев, требующих потокобезопасности, ConcurrentDictionary<TKey, TValue>
добавляет накладные расходы, но обеспечивает безопасный доступ с нескольких потоков без ручной блокировки.
В конечном счете, выбор реализации ассоциативного массива в C# зависит от ваших конкретных потребностей в отношении порядка, производительности и потокобезопасности.