c#dictionary如何为单个键添加多个值?

sai*_*ler 22 c# dictionary list

我创建了字典对象

Dictionary<string, List<string>> dictionary =
    new Dictionary<string,List<string>>();
Run Code Online (Sandbox Code Playgroud)

我想将字符串值添加到给定单个键的字符串列表中.如果密钥尚不存在,那么我必须添加一个新密钥.List<string>是不是预定义的,我的意思是我没有创建任何列表对象,然后提供给dictionary.Add("key",Listname).如何动态创建此列表对象dictionary.Add("key",Listname),然后将字符串添加到此列表.如果我必须添加100个密钥,那么在执行dictionary.Add指令之前我是否必须创建100个列表?我是否必须对此列表的内容进行pedefine?

谢谢.

Ada*_*rth 30

更新:TryGetValue在您拥有列表的情况下使用仅执行一次查找来检查是否存在:

List<int> list;

if (!dictionary.TryGetValue("foo", out list))
{
    list = new List<int>();
    dictionary.Add("foo", list);
}

list.Add(2);
Run Code Online (Sandbox Code Playgroud)


原文: 检查是否存在并添加一次,然后键入字典以获取列表并正常添加到列表中:

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

if (!dictionary.ContainsKey("foo"))
    dictionary.Add("foo", new List<int>());

dictionary["foo"].Add(42);
dictionary["foo"].AddRange(oneHundredInts);
Run Code Online (Sandbox Code Playgroud)

或者List<string>像你的情况一样.

顺便说一句,如果您知道要添加到动态集合中的项目数量,例如List<T>,支持获取初始列表容量的构造函数:new List<int>(100);.

这将获取预先满足指定容量所需的内存,而不是每次开始填充时抓取小块.如果您知道有100个键,则可以对词典执行相同的操作.

  • @Roken然后我不明白为什么你使用C#,.NET和你无法控制的CLR.在这种语言中,我不会出现奇怪的一秒钟; 并且不要误解我的答案,因为没有看到价值 - 我只是重视其他东西而不是那些. (3认同)
  • 使用TryGetValue比ContainsKey更高效,并重新索引到字典中. (2认同)

Ren*_*iuz 8

如果我理解你想要的东西:

dictionary.Add("key", new List<string>()); 
Run Code Online (Sandbox Code Playgroud)

后来...

dictionary["key"].Add("string to your list");
Run Code Online (Sandbox Code Playgroud)


Zel*_*Ady 6

Dictionary<string, List<string>> dictionary = new Dictionary<string,List<string>>();

foreach(string key in keys) {
    if(!dictionary.ContainsKey(key)) {
        //add
        dictionary.Add(key, new List<string>());
    }
    dictionary[key].Add("theString");
}
Run Code Online (Sandbox Code Playgroud)

如果密钥不存在,List则添加new (在if中).否则密钥存在,所以只需List在该密钥下添加一个新值即可.