如何对文件txt行5000000进行排序?

时间:2013-12-18 14:51:05

标签: c# sorting

我有一个50000行的无序文件,其信​​息和日期如下:

for instance          desired Result
------------          ---------------      
 723,80                1,4   
 14,50                 1,5 
 723,2                 10,8
 1,5                   14,50 
 10,8                  723,2 
 1,4                   723,80       

现在我该如何实现这样的事情呢?

我已经尝试过sortedList和sorteddictionary方法但是没有办法在列表中实现新值,因为列表中有一些重复值。 如果你建议最好的方法,我会很感激。

还有一件事,我已经看到了这个问题,但是当我使用File时,这个问题使用了这个课程。

C# List<> Sort by x then y

3 个答案:

答案 0 :(得分:12)

var result = File.ReadAllLines("...filepath...")
                 .Select(line => line.Split(','))
                 .Select(parts => new
                 {
                     V1 = int.Parse(parts[0]),
                     V2 = int.Parse(parts[1])
                 })
                 .OrderBy(v => v.V1)
                 .ThenBy(v => v.V2)
                 .ToList();

默认情况下,将正确处理重复项。如果要删除它们,请在某处添加.Distinct(),例如在ReadAllLines之后。

答案 1 :(得分:2)

您需要将文件解析为由类定义的对象。一旦它进入对象,你就可以开始对它进行排序。

public class myObject
{
    public int x { get; set; }
    public int y { get; set; }
}

现在,一旦将文件解析为对象列表,您应该可以执行以下操作:

var myList = new List<myObject>(); //obviously, you should have parsed the file into the list.
var sortedList = myList.OrderBy(l => l.x).ThenBy(l => l.y).ToList();

答案 2 :(得分:2)

首先,对每一行进行排序,使其顺序正确(例如[723,80] - > [80,723]

然后使用这样的比较对所有行进行排序:

int Compare(Tuple<int,int> lhs, Tuple<int,int> rhs)
{
  int res = lhs.Item1.CompareTo(rhs.Item1)
  if(res == 0) res=lhs.Item2.CompareTo(rhs.Item2);

  return res;
}