【问题标题】:How can i fill my List<List<int>> from a text file using C#? [closed]如何使用 C# 从文本文件中填充我的 List<List<int>>? [关闭]
【发布时间】:2013-12-13 21:01:48
【问题描述】:

我有一个名为...的 int 列表

List<List<int>> TotalDeEspecies = new List<List<int>>();

在该列表中,我存储了我在模拟器中拥有的动物数量以及给定进程的周期数

如果我将所有值保存在一个文本文件中,

 using (StreamWriter sr = new StreamWriter(@"../../Archive/TextFileTotalEspecies.txt"))
        {
            foreach (List<int> list in TotalDeEspecies)
            {
                foreach (int s in list)
                {
                    sr.WriteLine(s);
                }
                sr.WriteLine("End Animal");
            }
            sr.Close();
            File.AppendAllText(@"../../Archivos/TextFileTotalEspecies.txt", "End" + Environment.NewLine);
        }

我有这个。

14
21
80
122
172
End Animal
304
277
265
314
394
End Animal
244
192
137
90
79
End Animal
398
470
478
434
315
End Animal
End

我使用“End Animal”和“End”来标识动物的结尾和文件的结尾。

现在我的问题是,我怎样才能再次填写我的...

List<List<int>> TotalDeEspecies = new List<List<int>>();

使用上面生成的文本文件?

【问题讨论】:

  • 要求代码的问题必须表明对所解决问题的最低理解。 包括尝试过的解决方案、它们为什么不起作用以及预期的结果。 另请参阅:Stack Overflow question checklist
  • @user,您已成功使用StreamWriter。你调查过StreamReader吗?
  • File.ReadLines 将是阅读它的好方法(比StreamReader 更容易使用,考虑到您不需要太多的控制或复杂性)。
  • 另外,你为什么关闭文件然后附加“End”?只需在末尾添加sr.WriteLine("End");。然后你不需要手动关闭StreamWriterusing 会处理这个问题。
  • 如果您必须使用这种格式或者您只是出于某种原因决定自定义格式比现有格式(如 JSON/XML)更好,请发表评论,因为它更难阅读,因此编写代码更有趣为了?

标签: c# list int


【解决方案1】:

它需要是那种文件格式吗?如果不考虑这个:

每个动物都是一个列表

折叠每个动物:

String.Join("~", animal.ConvertAll(i => i.ToString()).ToArray());

然后将每个动物写入一个新行。

然后可以将每一行转换回一个列表:

List<int> animal = new List<int>(stringLine.Split('~').Select(n => Convert.ToInt32(n)).ToArray());

这不是比您目前拥有的文件格式更简单的解决方案吗?

然后你的输出代码变成:

using (StreamWriter sr = new StreamWriter(@"../../Archive/TextFileTotalEspecies.txt"))
    {
        foreach (List<int> list in TotalDeEspecies)
        {
            string s = String.Join("~", list.ConvertAll(i => i.ToString()).ToArray());
            sr.WriteLine(s);
        }
        sr.Close();
        File.AppendAllText(@"../../Archivos/TextFileTotalEspecies.txt", "End" + Environment.NewLine);
    }

您可以使用 StreamReader 将其取回:

    string stringLine = sr.ReadLine();
    values.Add(new List<int>(stringLine.Split('~').Select(n => Convert.ToInt32(n)).ToArray()));

【讨论】:

    【解决方案2】:

    考虑下面的代码 sn-p...

    List<List<int>> values = new List<List<int>>();
    List<int> innerValues = new List<int>();
    foreach (string item in File.ReadAllLines(@"../../Archivos/TextFileTotalEspecies.txt"))
    {
        if (item == "End Animal")
        {
            values.Add(innerValues);
            innerValues = new List<int>();
            continue;
        }
        else if (item == "End")
        {
            break;
        }
        else
        {
            innerValues.Add(int.Parse(item));
        }
    }
    

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2019-07-19
      • 2013-05-17
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多