C#数据结构:我应该使用什么类型的集合?

时间:2011-06-24 01:35:27

标签: c# data-structures collections

对于集合中的每个项目,我需要一个短字符串和一些int16字段。我想使用字符串字段迭代集合(意味着我不想使用数字索引进行迭代)。 该系列最多约10件。感谢您的任何建议。

5 个答案:

答案 0 :(得分:7)

我认为Dictionary<string, List<int>>应该适合您的需要。

Dictionary<string, List<int>> dictionary = new Dictionary<string, List<int>>();
dictionary.Add("key", new List<int>{1,2,3,4});
...

答案 1 :(得分:2)

如果您使用.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);

答案 2 :(得分:1)

我会使用Dictionary,因此您可以使用任意键string为其编制索引。

答案 3 :(得分:1)

如果您的意思是迭代作为循环播放;那真的没关系,因为所有的集合都支持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"];

答案 4 :(得分:1)

如果集合中的项目很小“10项或更少”,那么使用ListDictionary的性能会更好,如果您不确定元素数量或将来元素数量可能增加那么使用HaybridDictionary

请注意,HybridDictionary机制在集合较小时在内部使用ListDictionary,然后在集合变大时切换到Hashtable。