2011-06-24 62 views
1

對於集合中的每個項目,我需要一個簡短的字符串和幾個int16字段。我想使用字符串字段來迭代集合(意味着我不想使用數字索引來迭代)。 收集最多約10件物品。感謝您的任何建議。C#數據結構:我應該使用哪種類型的集合?

+0

偉大的鏈接:[C#/ .NET基礎:選擇正確的集合類](http://blackrabbitcoder.net/archive/2011/06/16/c.net-fundamentals-choosing-the-right-collection-class.aspx) – TrueWill

回答

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

我會使用Dictionary,所以你可以使用任意鍵索引到它 - string,在你的情況。

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"]; 
1

如果集合中的項目是小的「10件或更少」,那麼更好的性能,使用ListDictionary,如果你不知道的元素數,或者如果元素計數在未來可能增加再使用HaybridDictionary

請注意,HybridDictionary機制在內部使用ListDictionary,而集合很小,然後在集合變大時切換到Hashtable。

+1

你的兩條建議是非泛型的,現在應該被認爲已經過時了,除非你有一個很好的理由將它們用於.NET2出現以來增加的通用集合。 – LukeH

+0

我也沒有使用它們,但這是你所知道的功課,而在C#2.0基礎考試「70-636」中,這仍然是答案... –

+1

這就是我會遇到的一個問題! – LukeH

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); 
相關問題