【问题标题】:Reading Dynamic Sets from File using C#使用 C# 从文件中读取动态集
【发布时间】:2017-05-25 03:48:32
【问题描述】:

这是我的文件,我想使用 C# 代码制作一个由 A 到 E 组成的每个集合(来自输入文件)

A,1234,58978,...
B,55785,..
C,5788,...
C,446687,..
E,5456,...
E,4578,..
A,47,78,
B,5,..
C,7,..
C,66,..
E,56,..
E,48,
A,87,48,
B,8,..
C,74,..
C,64,..
E,57,..
E,48,

非常清楚,

我的第一套会是这样的,

A,1234,58978,...
B,55785,..
C,5788,...
C,446687,..
E,5456,...
E,4578,..

我的第二组会像,

A,47,78,
B,5,..
C,7,..
C,66,..
E,56,..
E,48,

我的第三组会是这样,

A,87,48,
B,8,..
C,74,..
C,64,..
E,57,..
E,48,

我的文件由 n 个集合组成。所以一种可能的方法是存储在一个 Array[] 中。这样我也可以在 foreach 循环中处理这些多个集合。

然而,我找不到在 C# 中计算和存储此动态 n 组值的方法。

【问题讨论】:

  • 使用List
  • 很好。到目前为止你尝试过什么?
  • var lines = System.IO.File.ReadLines(path).Skip(1).Take(2).ToArray() 但是在 Skip and Take 函数中,值不应该是静态的(硬编码)。因为我的文件有 n 组。

标签: c# string file-io


【解决方案1】:

结果将在以下代码中的字典sets 中。基本上它读取每一行并将该行的第一个字符与前一行的第一个字符进行比较。如果更大,则只会添加到集合中。如果更小,它将创建一个新集并添加到该集。它会一直这样做,直到它读完整个文件。

我正在使用ReadLines 方法,因此它不会将整个文件加载到内存中,而是在我们请求时逐行加载它们。

string last = "";
var sets = new Dictionary<int, List<string>>();
File.ReadLines("YourFilePath.txt").Select(x =>
{
    string first = x.Substring(0, 1);
    last = last == "" ? first : last;
    if (first.CompareTo(last) > 0)
    {
        sets[sets.Count-1].Add(x);
    }
    else
    {
        sets.Add(sets.Count, new List<string>());
        sets[sets.Count - 1].Add(x);
    }

    return x;
}).ToList();

【讨论】:

  • 谢谢,这解决了我的问题。此外,现在我可以使用以下代码轻松处理字典中的每个值 foreach (List list in sets.Values) { foreach(string entry in list ) { MessageBox.Show("Entry"+entry); } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 2015-09-06
  • 2012-04-18
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多