2

我有一个特别具有某些特征的文件,但是在这个文件的第 30 列中,我有一个数字,不是连续的,5 位数字,我想根据这个数字按升序排列这个文件的行命令。

例如:

sample sample sample1        00094
sample sample sample2        00001
sample sample sample3        00032
sample sample sample4        00491
sample sample sample5        00002
sample sample sample6        00010
sample sample sample7        00007

序号是00094、00001...

输出是:

sample sample sample2        00001
sample sample sample5        00002
sample sample sample7        00007
sample sample sample6        00010
sample sample sample3        00032
sample sample sample1        00094
sample sample sample4        00491

我开发了一个非常猪的sitema,我在其中播放列表中的所有内容,并进行冒泡排序,然后,我想知道是否有更有效的方法来做到这一点,也许使用Linq,甚至是不同的方式。

谢谢您的帮助。

4

2 回答 2

4
string[] lines = File.ReadAllLines(@"C:\temp\yourFile.txt");

var sotedLines = lines.Skip(1)
                      .Take(lines.Length - 2)
                      .OrderBy(getKeyFromLine)
                      .ToArray();

sortedLines.ForEach(Console.WriteLine);

现在,如果您的列由空格分隔,请使用下一个getKeyFromLine实现:

Func<string, int> getKeyFromLine = line => int.Parse(line.Split(' ')[30]);

如果它只是30 - 35一行中从一开始的索引数字,那么使用

Func<string, int> getKeyFromLine = line => int.Parse(line.Substring(29, 5));
于 2013-06-11T14:33:42.310 回答
1

怎么样:

string[] lines = File.ReadAllLines(@"text.txt");
var result = lines.AsParallel()
    .OrderBy(s => s.Split(' ').Last())
    .ToList();
于 2013-06-11T14:48:34.327 回答