将键值对从文件添加到字典

本文关键字:字典 添加 文件 键值对 | 更新日期: 2023-09-27 17:58:55

我正在尝试将.txt文件中的值导入到我的dictionary中。 .txt文件的格式如下:

唐老鸭, 2010-04-03

等等...每行有 1 个这样的条目。 当我尝试将拆分的字符串添加到dictionary时,我的问题就来了。

我正在尝试这样做:scoreList.Add(values[0], values[1]);但它说名称在上下文中不存在。 我希望有人能指出我正确的方向......

谢谢!

    private void Form1_Load(object sender, EventArgs e)
    {
          Dictionary<string, DateTime> scoreList = new Dictionary<string, DateTime>();
          string path = @"list.txt";
          var query = (from line in File.ReadAllLines(path)
                       let values = line.Split(',')
                       select new { Key = values[0], Value = values[1] });
          foreach (KeyValuePair<string, DateTime> pair in scoreList)
          {
              scoreList.Add(values[0], values[1]);
          }
          textBox1.Text = scoreList.Keys.ToString();
    }

将键值对从文件添加到字典

values变量仅在 LINQ 查询的作用域内。您需要枚举查询结果,并将值添加到字典中:

foreach (var pair in query)
{
    scoreList.Add(pair.Key, pair.Value);
}

话虽如此,LINQ 具有一种ToDictionary扩展方法,可以在此处为您提供帮助。您可以将循环替换为:

scoreList = query.ToDictionary(x => x.Key, x => x.Value);

最后,为了使类型正确,您需要使用 DateTime.Parse 将值转换为DateTime

首先你做错了,你应该从列表中添加项目,而不是 LINQ 中使用的值 [0] 和值 [1]。

Dictionary<string, DateTime> scoreList = new Dictionary<string, DateTime>();
    string path = @"list.txt";
    var query = (from line in File.ReadAllLines(path)
                 let values = line.Split(',')
                 select new { Key = values[0], Value = values[1] });
    foreach (var item in query) /*changed thing*/
    {
        scoreList.Add(item.Key, DateTime.Parse(item.Value)); /*changed thing*/
    }
    textBox1.Text = scoreList.Keys.ToString();

代码的直接问题是values只存在于查询表达式中......序列具有一个元素类型,该元素类型是具有KeyValue属性的匿名类型。

下一个问题是你然后迭代scoreList,一开始将是空的......而且也没有迹象表明您计划从string转换为DateTime的位置。哦,我不确定Dictionary<,>.Keys.ToString()是否会给你任何有用的东西。

不过,您可以简单地构建字典:

var scoreList = File.ReadLines(path)
                    .Select(line => line.Split(','))
                    .ToDictionary(bits => bits[0], // name
                                  bits => DateTime.ParseExact(bits[1], // date
                                              "yyyy-MM-dd",
                                              CultureInfo.InvariantCulture));

请注意使用 DateTime.ParseExact 而不仅仅是DateTime.Parse - 如果您知道数据的格式,则应使用该信息。