C # Array или другая структура данных - PullRequest
1 голос
/ 20 января 2011

Я хотел бы знать, какова лучшая структура данных для хранения следующей информации:

Допустим, у нас есть эта строка:

1.2.0.0.15.4.22.3.0.0.0.2

В строке также будут учитываться значения, содержащие более 1 цифры.Точки на самом деле не нужны, просто чтобы прояснить, что я хочу.

где каждая цифра в строке представляет счетчик того, что мы должны считать каждую минуту.Итак, 1-ую минуту мы насчитали 1, 2-ую 2, 3-ую 0 и так далее.Предопределенного размера не существует, а также я хотел бы делать вставки или изменения только тогда, когда я что-то посчитал, поэтому нули будут фактически представлены в структуре нулями.Отсчет будет постепенно.

Первоначально структура будет пустой в течение первой минуты.

Ответы [ 6 ]

6 голосов
/ 20 января 2011

A List<int?> будет хорошо работать. Он сохранит порядок, в котором вы добавили элементы, и разрешит доступ к элементам в любой точке и будет автоматически увеличиваться по мере необходимости.

Вы также можете сделать List<KeyValuePair<int, int?>>, где Key - это минута, а Value - значение.

Другая альтернатива (спасибо fearofawhackplanet ) использует Dictionary, что означает, что вы можете ссылаться на данные по минутам. Value из Dictionary не имеет значения nullable, так как вам не нужно добавлять записи за минуты, в которых нет данных.

* 1016 Е.Г. *

Dictionary<int, int> datalist = new Dictionary<int, int>();
int minute = 5;
int data = 3;
datalist.Add(minute, data);
1 голос
/ 20 января 2011

Вы можете использовать словарь, он будет иметь преимущество в том, что вам не нужно будет хранить какую-либо информацию в то время, когда у вас нет данных.Например:

Dictionary<int, int> data = new Dictionary<int, int>();
data.Add(1,1);
data.Add(2,2);
data.Add(5,5);
data.Add(6,4);

и так далее.Недостатком этого является то, что если вы перебираете структуру данных, вы будете знать только, сколько раз было ноль, по факту, что они не появлялись

1 голос
/ 20 января 2011

Мне кажется, что List<int?> (сокращенный синтаксис для List<Nullable<int>>) будет достаточно.

Это должно дать вам легко расширяемую структуру данных для хранения ваших значений (включая нули) и позволит вам легко перебирать значения.

Если вам нужно выполнить какой-либо поиск в зависимости от того, в какую минуту вы пытаетесь найти значение, вам может потребоваться переключиться на Dictionary<int, int?>, чтобы вы могли использовать минуту в качестве ключа.

0 голосов
/ 20 января 2011

Я бы, вероятно, просто использовал char [] (массив символов) ... Вы можете установить их неограниченными, чтобы у вас не возникало проблем с длиной ...

0 голосов
/ 20 января 2011

Похоже, вы могли бы использовать List<int> для своих записей или List<int?>, который позволяет хранить null значения.

0 голосов
/ 20 января 2011

Ну, во-первых, вам явно нужна структура данных, которая может легко расти.Массивы не соответствуют этому счету.Итак, я бы сначала подумал об использовании List<int>.Затем вы упоминаете, что вам нужно хранить нули, поэтому я уточню это до List<int?>.Кроме того, вы, вероятно, захотите запросить счетчик за данную минуту, и с List<int?> вы можете сделать это за O(1) время.Без дополнительной информации это то, что я бы использовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...