使用C#从文件读取动态集

时间:2017-05-25 03:48:32

标签: c# string file-io

这是我的文件我想使用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-sets组成。所以可能的方法是存储在Array []中。这样我也可以在foreach循环中处理那些多个集合。

然而,我无法找到一种方法来计算和存储C#中动态的n组值。

1 个答案:

答案 0 :(得分:0)

结果将在以下代码的字典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();