2016-06-29 11 views
-1

я должен сохранить, постоянно (или, по крайней мере, до следующего исполнения), таблицу, как:Какую структуру данных я должен использовать? HashTable, Array ...?

| ID | Color | 
|------|---------| 
| 0001 | Red | 
| 0002 | Blue | 
| 0003 | Green | 

Я думал, чтобы сохранить его наружно в виде файла XML, но я не знаю, какая структура данных я должен использовать для доступа к этим данным внутренне, потому что я хочу какой-то итеративный элемент, но быстро и легко получить доступ и сохранить во внешний XML-файл, и если я хочу добавить новое отношение, то идентификатор должен быть 0004.

Я имею в виду, следует ли использовать Hashtable, DataTable, Array ...? Должен ли я изменить способ экспорта этих отношений или лучший (простой и быстрый) способ экспортировать их в XML-файл?

+1

Обратите внимание, что тип данных, который вы используете для хранения коллекции элементов, зависит от ваших требований времени выполнения (по крайней мере, производительности, использования памяти и шаблона использования - скорости вставки/удаления/поиска). Вам не нужно сохранять такую ​​же структуру, когда вы делаете данные постоянными (например, хэш-таблица может просто быть сохранена навалом наборе узлов). Требования к хранению - это еще одна история с разными вариантами: нужно ли вручную редактировать этот файл? Использовать его в качестве формата обмена? Это должно быть особенно мало? Вам нужно обращаться с версиями? –

+0

Как насчет списка? Идентификатор может быть только индексом списка. Слишком мало информации о том, что вам действительно нужно делать с этими данными, что означает идентификатор, как вы к нему обращаетесь и т. Д. Однако, скорее всего, это мнение основано. –

+0

ID вещь _may_ будет немного более сложной, потому что вы не можете просто использовать количество элементов в коллекции, чтобы узнать следующий идентификатор (если вы не запретили удаление). Как получить следующий идентификатор может быть так же просто, как запрос на поиск в настоящее время одного (если параллелизм и скорость/размер коллекции не являются проблемой), в противном случае вам нужно будет хранить _next ID_ (или последний ...) где-нибудь (в конечном итоге сохраняя поточно-безопасный) –

ответ

1

С дженериками почти нет причин использовать Hashtable. Наилучшим способом хранения этих значений в памяти является общий словарь (см.: https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx). Поэтому, если ваш «ID» равен int, а ваш «Цвет» - string, используйте: Dictionary<int, string>. Эти словари бывают быстрыми (O (1) -операция), и им не нужны никакие отбрасывания, как это делает Hashtable.

Для сохранения его в файле существует несколько вариантов. Вы можете попробовать положить словарь внутри класса, и хранить весь класс к XML-файл с помощью:

0

Я думаю, что вы можете пойти с DataTable, если преобразование записей в XML - это ваше намерение. Он имеет метод DataTable.WriteXml(), который прекрасно выполняет вашу работу.

Но если вам нужен более быстрый доступ и некоторые манипуляции, перейдите в словарь. Это намного быстрее, чем DataTable по крайней мере в доступе.

0

Сколько у вас данных? Изменилось ли это? Как доступны данные?

Если есть миллионы строк, которые не меняются, и поиск всегда по id, то, скорее всего, будет лучше Dictionary<int, Color>.

Если есть несколько десятков строк, которые обновляются и доступны в любом поле, простой массив пользовательского типа (свойства id и цвета), выполняющий простой линейный поиск, вероятно, будет лучшим (не нужно поддерживать данные порядок экономит достаточно, чтобы иметь более дорогой поиск).

(В любом случае, поскольку вы выполняете всю работу в памяти, лучший формат персистентности будет лучшим: дает вам гибкость во время выполнения, где вам это нужно.) Любая реальная ситуация будет падать между ними. В конце концов, если производительность достаточно важна, вы попытаетесь сделать один способ и измерить; затем другой способ и измерение. (Поэтому небольшая абстракция, чтобы скрыть внутренние детали, - это важное место для начала.) Повторяйте, пока не будете соответствовать вашим требованиям к производительности.

+0

Данные будут расти логарифмически, чтобы стабилизировать (я рассчитываю ниже 100) в зависимости от количества исполнений. Мне просто нужно и идентификатор, и строка, поэтому вам не нужен большой размер в файле, чтобы сохранить его. Я просто хочу быстрый и простой способ изменения и импорта и экспорта данных. Спасибо –

+0

@JoseMMartin В этом размере почти все будет быстро: у вас недостаточно данных для создания замедлений. – Richard

Смежные вопросы