当我的程序运行时,它会在一条消息中接收带有Id和数据的消息。
我想为每个Id创建一个新的List,我可以存储来自该Id的数据。 问题是我不知道在程序运行之前我会收到多少Id。我唯一知道的是它很多。所以我不知道是否可能或我应该如何做到这一点。 这是我基本上想要做的事情:
if (!(idlist.Contains(id))){
idlist.Add(id);
List<string> id.ToString() = new List<string>();}
答案 0 :(得分: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" );
答案 1 :(得分: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]
}
希望这有帮助!
答案 2 :(得分: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>();
}
答案 3 :(得分: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,则可能会发生这种情况。