2009-11-17 49 views
1

當我的程序運行時,它會在一條消息中接收帶有Id和數據的消息。如何在程序運行時創建列表

我想爲每個ID創建一個新列表,以便可以存儲來自該Id的數據。 問題是,我不知道我的程序運行之前會收到多少個Id。我知道的唯一的事情就是它很多。所以我不知道這是可能的還是我該怎麼做。 這笏我基本上是試圖做的事:

if (!(idlist.Contains(id))){ 

idlist.Add(id); 
List<string> id.ToString() = new List<string>();} 

回答

4

你可以這樣做:

Dictionary<int, List<string>> dictionary = new Dictionary<int, List<string>>(); 
dictionary[newId] = new List<string>(); 
dictionary[newId].add("Hello!"); 

詞典是很方便!

你可以做這樣的事情還有:

if(!dictionary.ContainsKey(newId)){ 
    //Add the new List<string> to the dictionary 
}else{ 
    //Add to the existing List<string> at dictionary[newId] 
} 

希望這有助於!

1

您可以使用Dictionary來存儲鍵值對列表。您的密鑰將是id,值將是字符串列表。

Dictionary<int,List<string>> ids = new Dictionary<int,List<string>>(); 

當你得到一個ID創建一個新的條目是這樣的:

ids[id] = new List<string>(); 

如果字典已經包含了這個ID就會被改寫一個條目。您可以檢查使用ContainsKey防止:

if(!ids.ContainsKey(id)) 
{ 
    ids[id] = new List<string>(); 
} 
5

使用字典:

var myDictionary = new Dictionary<int, List<string>>(); 
// ..... 
List<string> myList; 
myDictionary.TryGetValue(id, out myList); 
if (null == myList) { 
    myList = new List<string>(); 
    myDictionary[id] = myList; 
} 
myList.Add("hello world"); 
+0

爲什麼不在你的if語句中使用'TryGetValue()'返回的布爾值? – Lucero 2009-11-17 13:09:09

+0

因爲「myDictonary」對於指定的鍵可以具有值「NULL」。我想在它裏面有非NULL列表。事實上,在這種情況下,返回值是無用的。 – TcKs 2009-11-17 13:43:03

+0

btw。爲什麼downvote? – TcKs 2009-11-17 13:43:42

0

我不相信你可以創建一個列表您正在嘗試的方式。你可能想嘗試是這樣的:

IDictionary<int, List<string>> idDictionary = new Dictionary<int, List<string>>() 
//wait for messages 
... 
//handle new message 
if (!idDictionary.containsKey(incommingId)){ 
    idDictionary.add(incommingId, new List<String>()) 
} 
idDictionary[incommingId].add(data); 

使用字典來保存數據列出了所有收到的ID的應提供像樣的查找性能。但是,如果在程序運行時收到數百個不同的ID,這可能會改變。