Entwickler-Ecke
Basistechnologien - Sorted List<int, string[]> je nach array index sortieren
C# - Mi 07.09.11 23:02
Titel: Sorted List<int, string[]> je nach array index sortieren
Hallo @ll,
ware lange nicht mehr im Forum, da ich sehr wenig Zeit hatte...
Auf jeden Fall hab ich ein Problem ne SortedList zu sortieren.
C#-Quelltext
1: 2: 3: 4: 5:
| public MainProcess() { AllFiles = new SortedList<int, string[]>(IntComparer); InitializeComponent(); } |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| FileInfo info = new FileInfo(line); string name = info.Name.Replace(info.Extension, null); string date = info.CreationTime.ToShortDateString(); long volume = info.Length; string dir = info.DirectoryName; string type = info.Extension.Remove(0, 1).ToUpper() + "-Datei"; string[] InfoSet = new string[] {name, date, volume.ToString(), dir, type }; AllFiles.Add(AllFiles.Count,InfoSet); |
So und jetzt möchte ich die Liste - je nach ausgewählter Option - nach
name,
date,
volume,
dir oder
type sortieren.
ich habe mich vorher noch nicht mit diesem Thema beschäftigt und brauche desshalb hilfe...[/i]
dark-destination1988 - Do 08.09.11 08:22
Zunächst würde ich dir raten aus deinen vier variablen eine Klasse zu bauen.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| public Class File { public string Name{get;set;} public DateTime Date{get;set;} public int Volume{get;set;} public string Type{get;set;} public string Dir{get;set;} } |
mit Linq sortieren
C#-Quelltext
1: 2: 3: 4: 5:
| var sortedlist= (from file in AllFiles orderby file.Value.Name select file).ToList(); var sortedlist= (from file in AllFiles orderby file.Value.Date select file).ToList(); var sortedlist= (from file in AllFiles orderby file.Value.Volume select file).ToList(); var sortedlist= (from file in AllFiles orderby file.Value.Type select file).ToList(); var sortedlist= (from file in AllFiles orderby file.Value.Dir select file).ToList(); |
C# - Do 08.09.11 13:06
Ok das mit der eigenen Klasse war ne gute Idee. Aber ich glaube du hast mich falsch verstanden.
Ich will das string[] Array in einer SortedList<int, string[]> sortieren.
Jetzt habe ich z.B. 3 Arrays:
Nr. | Name | Volume | Typ | Erstelldatum | Verzeichnis
1 | Config | 120034 | .cfg | 10.10.2009 | C:\
2 | Setting | 65530 | .ini | 15.08.2010 | C:\Windows\
3 | App | 600032 | .dat | 23.04.2008 | C:\users\admin\
So und die Nummer ist ja der Index meiner SortedList und der Rest sind Komponenten von meinem string[]-Array. Und jetzt möchte ich die Liste - je nach ausgewählter Option - nach "Name", "Volume", ... sortieren können. Ich hab aber noch keine genaue Ahnung wie das funzen soll.
dark-destination1988 - Do 08.09.11 13:21
nehme doch wie ich vorgeschlagen hatte eine die eigene Klasse als sortedList
dann kannst du die sortieren wie in meinem beispiel!
C# - Do 08.09.11 13:35
Ok des habe ich jetzt verstanden, aber muss ich mit deinem var beispiel in eine neue Klasse bzw. wo soll ich das hinsetzten?
dark-destination1988 - Do 08.09.11 13:44
naja was willste den mit der liste machen? eine liste sortieren ist die eine sache, aber darstellen musst du die ja dann auch noch (zum beispiel in einem datagridview) zum beispiel könntest du radiobuttons erstellen und dort wählen lassen nach welchem kriterium sortiert werden soll (dann eventuell noch auf und absteigend)
C# - Do 08.09.11 13:58
Ja das habe ich alles schon gemacht. Mir fehlt als letztes eben nur noch das sortieren der Liste. Das Programm liest ganz einfach alle Dateien in den angegebenen Ordner aus und sammelt die Infos zu den Dateien, sprich Typ, Speichergröße, ... und diese ganzen Dateien werden dann entweder in eine Text, Word oder Excel Datei geschrieben. Sprich die komplette Liste AllFiles wird dann in die Datei geschrieben.
dark-destination1988 - Do 08.09.11 14:06
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| SortedList<int, File> allFiles = new SortedList<int,File>(); var sortedfile = (from fil in allFiles orderby fil.Value.Datei select fil).ToList(); allFiles.Clear() foreach (var fil in sortedfile) { allFiles.Add(fil.Key, fil.Value); } |
C# - Do 08.09.11 15:05
//EDIT
Ok jetzt ist doch noch ein Problem aufgetreten. Und zwar wenn ich
C#-Quelltext
1:
| var sortedfile = (from fil in allFiles orderby fil.Value.Name select fil).ToList(); |
in
C#-Quelltext
1:
| var sortedfile = (from fil in allFiles orderby fil.Value.Volume select fil).ToList(); |
(oder einen anderen Typen) ändere, sortiert das Programm immer noch Alphabetisch nach
Name.
Muss ich noch was anderes ändern, oder brauch ich zum sortieren von
long und
DateTime andere Codezeilen?
Allerdings funktioniert das auch beim sortieren von
Type nicht, welches ja auch nur ein string ist.
Ralf Jansen - Do 08.09.11 19:02
sortedfile wird wohl richtig sortiert sein. Wo schaust du denn ob es richtig sortiert ist?
Wenn du in allFiles nachschaust also nach einer Operation wie sie dark-destination1988 zeigt ist das kein Wunder. Ein SortedList ist immer nach dem Key sortiert. Egal in welcher Reihenfolge die in die SortedList eingefügt wurden, wofür wäre auch sonst der Key gut? Bist du dir sicher das du mit SortedList die richtige Wahl getroffen hast?
C# - Do 08.09.11 19:09
Sieht wohl nicht so aus...
Dann muss ich dass doch in ner neuen Klasse machen oder? Mit IComparer oder IComparision. Aber ich weis nicht wie ich das hinbekommen soll.
Würde mich für hilfe bedanken.
dark-destination1988 - Fr 09.09.11 07:08
meiner meinung würde eine normale liste auch genügen
C# - So 11.09.11 20:45
Ja denke ich auch, aber ich brauche hilfe bei dem Sortier-Algo.
C# - So 11.09.11 23:53
Ok. Ich hab jetz ne ganz einfache Lösung gefunden. Wen es interessiert:
C#-Quelltext
1:
| List<FileInfos> allFiles = new List<FileInfos>; |
C#-Quelltext
1:
| allFiles.Sort(delegate(FileInfos f1, FileInfos f2) { return f1.name.CompareTo(f2.name); }); |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| public class FileInfos() { public string name; public string dir; public string type; public long volume; public DateTime date; } |
Man kann nach allen Typen sortieren, also nach DateTime, string, long, .... Man muss einfach nur den Variablennamen im delegate-Block ändern.
Kha - Mo 12.09.11 00:16
C# hat folgendes geschrieben : |
| Ok. Ich hab jetz ne ganz einfache Lösung gefunden. |
Für mich ist
C#-Quelltext
1:
| allFiles.OrderBy(info => info.name) |
immer noch kürzer :nixweiss: . Man darf nur eben nicht erwarten, dass dann die Liste selbst sortiert ist ;) .
C# - Mo 12.09.11 17:53
xD. Alos meine Methode funktioniert super und einwandfrei. Solang diese läuft bin ich happy xD
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!