【问题标题】:I want to save the Dictionary Values我想保存字典值
【发布时间】:2019-03-27 00:30:44
【问题描述】:

我有这样的事情,我需要保持一些价值观

static Dictionary<string, int> DICT1 = new Dictionary<string, int>();
static Dictionary<string, Dictionary<string, int>> DICT2 = new Dictionary<string, Dictionary<string, int>>();

而且我需要能够在 DICT2 中存储 DICT1 中的内容,但 DICT1 的值需要在每次迭代时从 0 开始初始化

假设我这样做

foreach (var v in words)
{
    string t="";
    for (int i = 0; i < 23; i++)
    {
        t = "first word"  //this is just for example 
        if (v == ArrayOfWords[i])
        {    
            DICT1[ArrayOfWords[i]] += 1;  
        }
    }
    DICT2.ADD(t,DICT1);

所以现在在第一次迭代之后,我已将值存储在 DICT2 键 t 中,值为 DICT1。

如果我在 DICT2 中的某个时间后重置 DICT1,我将不会拥有添加对 (t,DICT1) 时的值。

所以我想说的是字典不会在内存中保存副本,如果我修改 DICT1,我会在我使用 DICT1 的所有地方进行修改。

【问题讨论】:

    标签: c# dictionary


    【解决方案1】:

    C# 使用引用,因此当您将 DICT1 存储在 DICT2 中时,您将存储一个引用,如果您重置或更改 DICT1 中的某些值,您将更改 DICT2 中的值。

    要复制字典,请使用:

    Dictionary<string, int> copy = new Dictionary<string, int>(DICT1); //--> temporal variable
    
    DICT2.Add(t, copy);
    

    【讨论】:

    • 我需要这样做超过 2000 次,这意味着我每次需要时都需要一份副本?
    • 我编辑了使用字典的构造函数复制内容的方法,我不知道复制过程的性能但这就是解决方案,你必须复制字典的内容避免引用。
    猜你喜欢
    • 2022-01-12
    • 2021-08-02
    • 1970-01-01
    • 2018-09-18
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多