如果我实例化一个新的,Dictionary我可以传递许多值:
Dictionary<string, string> data = new Dictionary<string, string>(){
{ "Key1", "Value1" },
{ "Key2", "Value2" },
{ "Key3", "Value3" },
{ "Key4", "Value4" },
{ "Key5", "Value5" },
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我已经有了一个Dictionary,例如在参数中传递它时,则需要调用Add每个键值对:
data.Add("Key1", "Value1");
data.Add("Key2", "Value2");
data.Add("Key3", "Value3");
data.Add("Key4", "Value4");
data.Add("Key5", "Value5");
Run Code Online (Sandbox Code Playgroud)
我想知道是否存在一种“速记”方法来一次将大量值添加到现有字典中-最好是本机地?如果是这样的话,可以接受权威的“否”。
不像我想要的那样干净,但这是我所知道的两个选择。
这个允许一次传递多个值,但是需要创建一个新值Dictionary而不是更新现有值:
Dictionary<string, string> newData = new Dictionary<string, string>(data)
{
{ "Key6", "Value6"},
{ "Key7", "Value7"},
{ "Key8", "Value8"},
};
Run Code Online (Sandbox Code Playgroud)
也可以创建一个扩展方法,但这仍然需要Add每一行:
public static void AddMany<Tkey, TValue>(this Dictionary<Tkey, TValue> dict, Dictionary<Tkey, TValue> toAdd)
{
foreach(KeyValuePair<Tkey, TValue> row in toAdd)
{
dict.Add(row.Key, row.Value);
}
}
Run Code Online (Sandbox Code Playgroud)
如果是这样的话,可以接受权威的“否”。
就是这样。
不,没有“ AddRange或”等效项,因为没有一种实用的方法可以一次将多个项目添加到字典中。List一次添加多个项目很有意义,因为它们可以通过一个命令复制到内部数组中。
对于a Dictionary,必须计算每个项目的哈希码以确定该值将存储在哪个“存储桶”中,因此有必要对每个项目进行迭代。因此,一种AddRange方法或其等效方法最好是语法糖。最糟糕的是,需要定义如果列表中的任何项目已经存在会发生什么情况。它会引发异常吗?如果是这样,在重复项之前添加的项目会保留在词典中吗?如果不是,是否会默默地跳过该项目或替换重复项目?
这些是没有直观正确答案的问题,因此尚未预先定义。
| 归档时间: |
|
| 查看次数: |
1615 次 |
| 最近记录: |