Вопрос по проектированию структуры данных - PullRequest
2 голосов
/ 23 ноября 2010

Я планирую спроектировать структуру данных, включая такие элементы, как

{1, 13, 15, 113, 117, 145}
{2, 23, 27}
{5, 53, 55, 511, 519}
{9, 11}

У меня есть две идеи до сих пор.

1-й.Создать словарь (ключ, значение);

When Key = 1, Value = ArrayList(13, 15, 113, 117, 145)
When Key = 2, Value = ArrayList(23, 27)
When Key = 5, Value = ArrayList(53, 55, 511, 519)
When Key = 9, Value = ArrayList(11)

2й.Создайте ArrayList (SubArrayLists)

subArrayList1 {1, 13, 15, 113, 117, 145}
subArrayList2 {2, 23, 27}
subArrayList3 {5, 53, 55, 511, 519}
subArrayList4 {9, 11}

Я планирую получить доступ к элементу во время выполнения.Какое решение лучше?

Спасибо за ваши комментарии.

[ Обновлено ]
1. Указанные выше числа int могут обозначать некоторые объекты.как объект словаря и т. д.
2. Все данные будут загружены в память после запуска приложения.Тогда только чтение разрешено.Не нужно писать / добавлять / удалять и т. Д.

Ответы [ 3 ]

3 голосов
/ 23 ноября 2010

Как насчет неровного массива? http://msdn.microsoft.com/en-us/library/2s05feca.aspx

Доступ к элементам через индекс массива O (1).

2 голосов
/ 23 ноября 2010

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

Если вы собираетесь последовательно обращаться к элементам структуры данных, ArrayList лучше

2 голосов
/ 23 ноября 2010

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

Если у вас много значений, к которым нужно обращаться много раз, то словарь - это то, что вам нужно, если вы обнаружите, что просматриваете список значений внутри другого для цикла:

foreach(var item in ListA)
{
  foreach(var item in ListB)
  {
     // Match against all values in list B        

  }
}

В вышеприведенном примере было бы лучше, если бы List B был словарем, а не списком, поскольку вы просматриваете список на каждой итерации ListA. Поскольку количество элементов в ListB увеличивается, время выполнения вышеупомянутого кода будет увеличиваться, однако, если вместо этого это словарь, это не будет иметь большого значения.

...