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

本文关键字:什么 类型 集合 数据结构 我应该 | 更新日期: 2023-09-27 18:00:07

对于集合中的每个项,我需要有一个短字符串和几个int16字段。我想使用字符串字段对集合进行迭代(这意味着我不想使用数字索引进行迭代)。藏品最多约10件。谢谢你的建议。

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

我认为Dictionary<string, List<int>>应该能满足您的需求。

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

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

我会使用Dictionary,这样您就可以使用任意键string对其进行索引。

如果您的意思是迭代为循环通过;那么这并不重要,因为所有集合都支持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"];

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

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