В C# все есть классы. Массив - тот же самый класс, с подключенным индексатором. Тепреь о последних: индексатор позволяет обращаться к объекту класса как к массиву, передавая в качестве индекса любой тип данных. Что характерно, если тип данных числовой - получается классический массив. Иначе, индекс может быть и строковым.
Это пример класса, который реализует необходимую тебе функциональность:
================================================================
/// <summary>
/// Generic массив со строковой индексацией.
/// </summary>
/// <typeparam>Задает тип ячеек массива</typeparam>
class ArrayEx<t>
{
/// <summary>
/// Маска допустимых строковых индексов.
/// </summary>
private string[] _IndexMask = new string[] { "ноль", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять" };
/// <summary>
/// Внутренний Generic массив.
/// </summary>
private T[] _InternalArray;
/// <summary>
/// Создает новый массив со строковой индексацией.
/// </summary>
/// <param>Передает длину нового массива</param>
public ArrayEx(int Length)
{
// Гарантирует, что длина массива не привысит длину маски.
if (Length < 0 || Length > _IndexMask.Length)
{
_InternalArray = new T[_IndexMask.Length];
return;
}
// Создает новый внутренний массив указанной длины.
_InternalArray = new T[Length];
}
/// <summary>
/// Строковый индексатор для доступа к элементу массива.
/// </summary>
/// <param>Строковый индекс доступа к элементу</param>
/// <returns>Generic значение запрошенной ячейки</returns>
public T this[string Index]
{
get
{
// Проверка корректности строкового индекса.
int pIndex = Array.IndexOf<string>(_IndexMask, Index);
if (pIndex < 0)
{
return default(T);
}
// Чтение ячейки.
return _InternalArray[pIndex];
}
set
{
// Проверка корректности строкового индекса.
int pIndex = Array.IndexOf<string>(_IndexMask, Index);
if (pIndex < 0)
{
return;
}
// Запись ячейки.
_InternalArray[pIndex] = value;
}
}
}
А это пример использования класса:
================================
// Создаем новый объект массив, указывая тип ячеек
ArrayEx<int> pTestArray = new ArrayEx<int>(10);
// Запись ячеек массива
pTestArray["ноль"] = 11;
pTestArray["один"] = 21;
// Чтение ячеек массива
int pValue = pTestArray["ноль"];
З. Ы. : если что-то непонятно, пиши в ICQ: 228004347 или Агент.
Другие языки программирования и технологии
Подскажите есть ли в c# строковые имена индексов массива как в PHP (пример a["abc"])? если есть то как с ними работать
Вроде хеш-таблицы для этого имеются.
Вроде неТ
Похожие вопросы
- c++.Неправильно выводятся индексы l и r,соответствующие индексам массива. Как это исправить?
- почему не работает данная программа? в некоторых случах выводит, что индекс массива вышел за его границы
- для чего сериализация массивов в PHP? пример использования, пожалуйсто:)
- Задачи на строковые и символьные массивы.
- Задача на C++ по одномерным (статическим) массивам, помогите сделать, пожалуйста, очень надо на завтра
- Каким образом в c++ можно передать двумерный массив в фунцкию?
- Почему нельзя настраивать массив в процессе работы программы? Pascal ABC ну и если так вообще везде?
- C почему у меня массив на 4 символа, а я ввожу 10 например, и он потом выводит 10 из этого массива, вот мой код:
- Количество максимальных (C++) как решить без массивов?
- C# программа с байтами, массивами и циклами