Autor Beitrag
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Mi 07.09.11 23:02 
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.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
 public MainProcess()
        {
            AllFiles = new SortedList<intstring[]>(IntComparer);
            InitializeComponent();
        }


ausblenden 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(01).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]

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Do 08.09.11 08:22 
Zunächst würde ich dir raten aus deinen vier variablen eine Klasse zu bauen.
ausblenden 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
ausblenden 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# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: 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.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Do 08.09.11 13:21 
nehme doch wie ich vorgeschlagen hatte eine die eigene Klasse als sortedList
ausblenden C#-Quelltext
1:
SortedList<int,File>					

dann kannst du die sortieren wie in meinem beispiel!
C# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: 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?

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: 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# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: 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.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Do 08.09.11 14:06 
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
SortedList<int, File> allFiles = new SortedList<int,File>();
//hier liste füllen
//sortieren
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);
}

Für diesen Beitrag haben gedankt: C#
C# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Do 08.09.11 15:05 
//EDIT

Ok jetzt ist doch noch ein Problem aufgetreten. Und zwar wenn ich
ausblenden C#-Quelltext
1:
var sortedfile = (from fil in allFiles orderby fil.Value.Name select fil).ToList();					

in
ausblenden 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.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: 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.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Fr 09.09.11 07:08 
meiner meinung würde eine normale liste auch genügen
ausblenden C#-Quelltext
1:
List<File> allFiles					
C# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: So 11.09.11 20:45 
Ja denke ich auch, aber ich brauche hilfe bei dem Sortier-Algo.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
C# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: So 11.09.11 23:53 
Ok. Ich hab jetz ne ganz einfache Lösung gefunden. Wen es interessiert:
ausblenden C#-Quelltext
1:
List<FileInfos> allFiles = new List<FileInfos>;					

ausblenden C#-Quelltext
1:
allFiles.Sort(delegate(FileInfos f1, FileInfos f2) { return f1.name.CompareTo(f2.name); });					

ausblenden 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.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 12.09.11 00:16 
user profile iconC# hat folgendes geschrieben Zum zitierten Posting springen:
Ok. Ich hab jetz ne ganz einfache Lösung gefunden.
Für mich ist
ausblenden 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# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Mo 12.09.11 17:53 
xD. Alos meine Methode funktioniert super und einwandfrei. Solang diese läuft bin ich happy xD

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler