2013-12-18 5 views
6

ich habe eine ungeordnete Datei mit 500000 Linie bekam, die ihre Informationen und das Datum wie die folgende sind:Wie kann ich die Datei TXT-Zeile 5000000 sortieren?

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  

Nun, wie kann ich so etwas umzusetzen?

Ich habe die SortedList- und Sorteddictionary-Methoden ausprobiert, aber es gibt keine Möglichkeit, einen neuen Wert in der Liste zu implementieren, da es einige Wiederholungswerte in der Liste gibt. Ich würde es schätzen, wenn Sie die bestmögliche Methode vorschlagen.

Noch eine Sache, ich habe diese Frage gesehen, aber diese verwendet die Klasse, während ich mit Datei gehe!

C# List<> Sort by x then y

+2

W Was ist falsch mit dem Link, den du gepostet hast? – gleng

+1

Ich verstehe nicht ganz, was Sie tun müssen. Sie müssen diese Liste natürlich sortieren, aber was ist das Muster ..? – OmniOwl

+0

Ja, ich möchte die Daten in der Datei sortieren, aber es gibt doppelte Werte, die berücksichtigt werden sollten. –

Antwort

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(); 

Dubletten werden standardmäßig richtig gehandhabt werden. Wenn Sie sie entfernen möchten, fügen Sie .Distinct() irgendwo hinzu, zum Beispiel nach ReadAllLines.

+1

Sehr schön gemacht, und in einer Zeile! –

2

Sie müssen die Datei in ein Objekt analysieren, das durch eine Klasse definiert ist. Sobald es im Objekt ist, können Sie beginnen, es zu sortieren.

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

Nun, wenn Sie die Datei in eine Liste von Objekten analysiert, sollten Sie in der Lage sein, etwas zu tun, wie folgt aus:

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(); 
+0

Konrad hat mich geschlagen. Definitiv die richtige Antwort. –

2

Zuerst sortieren jeder Zeile, so dass sie in der richtigen sind (um zB [723,80] -> [80723]

Dann sortieren alle Zeilen einen Vergleich so etwas wie dies mit:

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; 
} 
Verwandte Themen