Структура данных C #: какой тип коллекции я должен использовать? - PullRequest
1 голос
/ 24 июня 2011

Для каждого элемента в коллекции мне нужно иметь короткую строку и несколько полей int16.Я хочу перебрать коллекцию, используя строковое поле (то есть, я не хочу использовать числовой индекс для перебора).Коллекция насчитывает не более 10 предметов.Спасибо за любые предложения.

Ответы [ 5 ]

7 голосов
/ 24 июня 2011

Я думаю Dictionary<string, List<int>> должно работать для вас.

Dictionary<string, List<int>> dictionary = new Dictionary<string, List<int>>();
dictionary.Add("key", new List<int>{1,2,3,4});
...
2 голосов
/ 24 июня 2011

Если вы используете .NET 4, и "немногие int16" всегда имеют одинаковое количество значений, вы также можете рассмотреть класс Tuple как значение в словаре:

var map = new Dictionary<string, Tuple<Int16, Int16, Int16>>();
map["Foo"] = Tuple.Create(1, 2, 3);

var values = map["Foo"];
Console.WriteLine("{0} {1} {2}", value.Item1, value.Item2, value.Item3);
1 голос
/ 24 июня 2011

Если элементы в коллекции маленькие «10 элементов или меньше», то лучше использовать для производительности ListDictionary , если вы не уверены в количестве элементов или если в будущем число элементов может увеличиться затем используйте HaybridDictionary .

Обратите внимание, что механизм HybridDictionary должен внутренне использовать ListDictionary, пока коллекция небольшая, а затем переключаться на Hashtable, когда коллекция становится большой.

1 голос
/ 24 июня 2011

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

 foreach (var item in collection) { ... }

Однако, если вы имеете в виду итерирование в качестве индексации, тогда Dictionary должен выполнить эту работу.

 class SomeFields { public int a; public int b; ... }

 var collection = new Dictionary<string, SomeFields>();
 collection.Add("name", new SomeFields() { a = 1, b = 2 });

 var fields = collection["name"];
1 голос
/ 24 июня 2011

Я бы использовал Dictionary, чтобы вы могли индексировать его, используя произвольный ключ - string, в вашем случае.

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