【问题标题】:Reassigning dictionary elements through loop通过循环重新分配字典元素
【发布时间】:2014-01-16 14:07:59
【问题描述】:

我有一本字典。我使用循环在字典中添加元素,并通过代码随时间更改它们。如何将元素恢复为初始值? 我的代码:

//for adding to the dictionary
Dictionary<string, string> D = new Dictionary<string, string>();

for(i=0; i<DataSet1.Tables[0].Rows.Count; i++)
{
    row = DataSet1.Tables[0].Rows[i];
    id[i]=row["UserID"].ToString(); 

    D.Add(id[i], "absent");
}   

//for reassigning back to absent
for(int i =0; i<D.Count; i++) D[i.ToString()]="absent";

我的重新分配循环而不是重新分配似乎只是添加新元素。最初计数大约 1000,在重新分配循环之后大约是 3000 .. P.S.使用 c# 请帮忙

【问题讨论】:

    标签: c# loops dictionary assign


    【解决方案1】:

    您可以枚举字典的键并设置条目值:

    foreach(string key in D.Keys.ToArray())
        D[key] = "absent";
    

    字典的创建也可以简化为(借助 Linq to DataSet):

    var D = DataSet1.Tables[0].AsEnumerable()
                    .ToDictionary(r => r.Field<string>("UserID"),
                                  r => "absent");
    

    【讨论】:

    • @usr 你是对的,应该枚举键,谢谢
    • 哦,天哪.. 我惊慌失措,完全忘记了 foreach。谢谢你。你是救生员!
    • 我收到一条错误消息,提示 Collection 已修改;枚举操作可能无法执行
    • @Vantalk as,JLRishe 建议您应该将键转储到数组或列表中以供枚举
    【解决方案2】:

    试试这个:

    foreach(var key in d.Keys.ToArray())
    {
        d[key] = "absent";
    }
    

    .ToArray() 是必需的,因为如果您尝试直接迭代 d.Keysforeach 循环将在第二次迭代之前抛出错误。

    【讨论】:

    • 你是对的,它确实引发了错误。添加了 .toArray ,它似乎工作。
    猜你喜欢
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 2019-03-21
    • 1970-01-01
    • 2021-04-22
    • 2016-01-05
    • 2020-11-04
    相关资源
    最近更新 更多