Какую коллекцию я должен использовать в этом случае? - PullRequest
0 голосов
/ 06 марта 2011

Я пишу класс для хранения какой-то табличной структуры.

Теперь у каждого столбца в этой структуре таблицы есть имя и индекс.

Теперь каждая строка в этом столбце будет проходить циклически, и в 90% случаев данные будут запрашиваться с использованием имени столбца, а не его индекса.

Итак, что такое хорошая структура данных для хранения столбцов, так что она может очень быстро получить индекс на основе имени. Сейчас я использую простую строку [], но мне интересно, есть ли более быстрые способы сделать это.

Части кода:

private string[] _columns;
private int _width;

private int getIndex(string columnName)
{
    for (int i = 0; i < _width; i++)
    {
        if (_columns[i] == columnName) return i;
    }
    return -1;
}

После того, как они были заданы, имена столбцов будут постоянными, и в основном они имеют длину около 10-16 символов.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 07 марта 2011

Поскольку вы обычно собираетесь обращаться к столбцам по имени, это звучит как хорошее место для использования карты (класс Dictionary в C #), которая отображает строки в столбцы (массивы строк). Это позволило бы O (1) получить доступ к имени, а не к текущему O (n) в приведенном выше коде.

Недостатком является то, что вы больше не сможете получить прямой доступ по индексу столбца. Однако это легко решить - просто сохраните список имен столбцов и используйте их для индексации! Вы можете позвонить

_columnsMap[_columns[index]]

если вам когда-либо понадобится индексировать по номеру, и это все еще время O (1).

1 голос
/ 06 марта 2011

Используйте Dictionary<string,int>, чтобы сохранить имена столбцов по отношению к их идентификатору.

Используя ваш пример (в котором пропущено заполнение _columns):

private IDictionary<string,int> _columns;
private int _width;

private int getIndex(string columnName)
{
    return _columns[columnName];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...