Laden...

Array.Sort() nur nach bestimmten Index sortiren

Erstellt von c#atriga vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.035 Views
C
c#atriga Themenstarter:in
34 Beiträge seit 2018
vor 5 Jahren
Array.Sort() nur nach bestimmten Index sortiren

Via Streamreader lese ich die Zeilen einzeln ein aus einer csv Datei welche die Daten via "," trennt.
Das ganze übergabe ich in ein Array (bar)
Ich möchte gern nun gern den ersten Index(also 0) sortiert haben und ausgeben lassen.
Aber irgendwie habe ich einen Denkfehler und komme nicht weiter.

private void button1_Click(object sender, EventArgs e)
        {
            StreamReader streamreader = new StreamReader("geo.txt");
            
            
            while (!streamreader.EndOfStream)
            {
                string foo = streamreader.ReadLine();
                string[] bar = foo.Split(',');
                Array.Sort(bar);
                           
                lstGeochecker.Items.Add(bar[0]);
            }
            

            streamreader.Close();
        }
C
2.121 Beiträge seit 2010
vor 5 Jahren

Ich möchte gern nun gern den ersten Index(also 0) sortiert haben

Was bedeutet das?
Der Index 0 den du zeigst bezieht sich auf das erste Element einer Zeile. Ein einzelnes Element kann man nicht sortieren.

Willst du alle Zeilen nach jeweils dem ersten Element sortieren? Dann musst du erst alle Zeilen laden und danach sortieren.

T
2.224 Beiträge seit 2008
vor 5 Jahren

Hier fehlen uns einfach Details was du dort genau sortieren willst.
Welches Format hat deine Zeile und wonach willst du dort genau sortieren.
Da deine Datei geo.txt heißt vermute ich mal ganz stark, du willst die Zeilen nach einer Geoposition sortiert haben.
Da diese i.d.R. aus Latitude und Longitude besteht, musst du sogar nach beiden sortieren.
Aber ohne genaue Details ist das reine Spekulation.

Also bitte etwas mehr Details was du genau wie sortiert haben willst.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

C
c#atriga Themenstarter:in
34 Beiträge seit 2018
vor 5 Jahren

Meine TXT ist mit folgenden Text aufgebaut:

Ort1, Code1, Beschreibung1, Datum1
Ort2, Code2, Beschreibung2, Datum2 usw..

Ich möchte also nun nur die Orte ausgeben lassen und diese sollen gleich sortiert sein.
Daher wollte ich das gesamte Array 'bar' sortieren und dann nur 'bar[0]' (also die Orte) in die Listbox schreiben.

T
2.224 Beiträge seit 2008
vor 5 Jahren

Dein Ansatz ist der falsche.
Du willst ja alle Zeilen sortiert haben, also musst du erst einmal alle Zeilen auslesen.
Am besten wär es wenn du jede Zeile als eine Instanz einer Klasse in einer Liste speicherst.
Dann kannst du ein Custom Sort auf die Property machen.

Also sowas in der Art:



// Einfache Klasse zum kapseln der Daten aus geo.txt
public class Data
{
	public string Ort { get; set; }
	
	public string Code { get; set; }
	
	public string Beschreibung { get; set; }
	
	public string Datum { get; set; }
}

private void button1_Click(object sender, EventArgs e)
{
	List<Data> daten = new List<Data>();
	
	using(StreamReader streamreader = new StreamReader("geo.txt"))
	{
		while (!streamreader.EndOfStream)
        {			
			string line = streamreader.ReadLine();
			string[] parts = line.Split(',');
			
			Data item = new Data();
			item.Ort = parts[0];
			item.Code = parts[1];
			item.Beschreibung = parts[2];
			item.Datum = parts[3];
            
			daten.Add(item);
        }
	}
	
	// Einträge nach Ort sortieren
	daten.Sort((d1, d2) => d1.Ort.CompareTo(d2.Ort));
	
	// Einträge aus der sortierten Liste anzeigen
	foreach(Data item in daten)
		lstGeochecker.Items.Add(item.Ort);
}

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

C
c#atriga Themenstarter:in
34 Beiträge seit 2018
vor 5 Jahren

Habe jetzt für das ganze eine "Liste" benutzt wo es viel besser geht.