2016-04-13 19 views
1

Ich versuche, xls Zeilen durch vierte Zeichenfolge in Zeilen zu sortieren.Sortierung Array von Strings durch einen Teil dieser Strings

Ich habe Probleme beim Erstellen eines Algorithmus, der das vierte Element jeder Zeile identifiziert und Inhalt in alphabetischer Reihenfolge auflistet. Die Wörter in jeder Zeile sind durch '' getrennt.

Kann mir bitte jemand eine richtige Richtung geben?

EDIT -------------------------- ok,

foreach (var line in list_lines.OrderBy(line => line.Split(' ')[3])) 

sortiert das Problem. Die Zeilen werden nach Bedarf sortiert. Excel ändert '' Leerzeichen mit ';'. Deshalb gab es beim Übersetzen einen Fehler.

Nun, ich denke, ich muss jeden Teil der Zeichenfolge zu int analysieren, da es nach der ersten Ziffer sortiert und nicht nach einer Zahl.

+0

Was möchten Sie tun, wenn eine Zeichenfolge keinen vierten Eintrag hat, wie in der Antwort von @Patrick Hofman? – Draken

+0

ist es seltsam. Ich bin sicher, dass xls-Datei in 5 Spalten – paddy

+0

aufgefüllt wird Sie werden wahrscheinlich durch ein anderes Symbol als Leerzeichen getrennt. Hast du beim Debuggen die Zeilen überprüft? – Draken

Antwort

1

Sie können die Linien aufgeteilt und dann in einem OrderBy das dritte Element verwenden:

foreach (var line in list_lines.OrderBy(line => line.Split(' ')[3])) 
{ 
} 
+0

danke für deinen Rat. Dein Code verursacht keinen Fehler, aber wenn er kompiliert wird, erhalte ich seltsame Fehler und der Code funktioniert nicht. – paddy

+1

Dann hat nicht jede Zeile ein viertes Element. –

+0

sie tun, gibt es 5 Spalten in der Datei. alle mit Zahlen gefüllt. – paddy

1

Nun, nur Art das Array:

string[] list_lines = ...; 

// General case: not all strings have 4 parts 
Array.Sort(list_lines, (left, right) => { 
    String[] partsLeft = left.Split(' '); 
    String[] partsRight = right.Split(' '); 

    if (partsLeft.Length < 4) 
    if (partsRight.Length < 4) 
     return String.Compare(left, right, StringComparison.OrdinalIgnoreCase) 
    else 
     return -1; 
    else if (partsRight.Length < 4) 
    return 1; 

    return String.Compare(partsLeft[3], partsRight[3], StringComparison.OrdinalIgnoreCase); 
}); 

Wenn alle Linien garantiert haben Sie mindestens 4 Items, die in

Array.Sort(list_lines, (left, right) => 
    String.Compare(left.Split(' ')[3], 
       right.Split(' ')[3], 
       StringComparison.OrdinalIgnoreCase)); 
simplfied werden können
Verwandte Themen