myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » ArrayList nur nach Teil der enthaltenen Werte sortieren
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

ArrayList nur nach Teil der enthaltenen Werte sortieren

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
sharpType sharpType ist männlich
myCSharp.de-Mitglied

Dabei seit: 07.05.2009
Beiträge: 226
Entwicklungsumgebung: Visual Studio 2010 Pro


sharpType ist offline

ArrayList nur nach Teil der enthaltenen Werte sortieren

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Profis,

ich habe vermutlich eine sehr leicht zu beantwortende Frage, für mich jedoch nicht so leicht :-)

Ich habe eine ArrayList, die mit Strings gefüllt ist. Diese sind durcheinander in der ArrayList wie folgt:

Ply.5<Seq.4>
Ply.2<Seq.8>
Ply.1<Seq.3>
Ply.55<Seq.2>

Ich möchte nun, dass die ArrayList nach der Nummer hinter Ply. sortiert wird und zwar aufsteigend wie folgt:

Ply.1<Seq.3>
Ply.2<Seq.8>
Ply.5<Seq.4>
Ply.55<Seq.2>

Mit

C#-Code:
plyNameList.Sort();

funktioniert das leider nicht. Dann habe ich mit:

C#-Code:
/// <summary>Implements ascending sort algorithm</summary>
    public class AscendingComparer : IComparer
    {
        public int Compare(object objA, object objB)
        {
            return String.Compare(objA.ToString(), objB.ToString());
        }
    }

und

C#-Code:
plyNameList.Sort(new AscendingComparer());

herumprobiert, aber komme auch nicht zum gewünschten Erfolg.

Kann mir da jmd helfen?

Vielen vielen Dank

Gruß
D.
23.10.2009 12:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
urga urga ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.10.2009
Beiträge: 21
Entwicklungsumgebung: VS EE 2008
Herkunft: Leipzig


urga ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

die strings innerhalb deiner liste, haben die immer die form
Ply.N<.........
wobei N eine zahl ist?

dann musst du in deiner Compare() methode über ReEx an N rankomen.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von urga am 23.10.2009 13:21.

23.10.2009 13:15 Beiträge des Benutzers | zu Buddylist hinzufügen
KroaX KroaX ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3398.jpg


Dabei seit: 31.08.2009
Beiträge: 148
Entwicklungsumgebung: VS2012
Herkunft: Köln


KroaX ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich würde beim compare ab dem "." hinter dem ply abschneiden und bis zum "<" die zahlen einlesen, in ein int konvertieren und dann einen Int.Compare jeweils machen dann solltest du eigentlich die richtige reihenfolge rausbekommen
23.10.2009 13:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
urga urga ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.10.2009
Beiträge: 21
Entwicklungsumgebung: VS EE 2008
Herkunft: Leipzig


urga ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

oder so. das ist - denk' ich mal - auch performanter...
23.10.2009 13:22 Beiträge des Benutzers | zu Buddylist hinzufügen
sharpType sharpType ist männlich
myCSharp.de-Mitglied

Dabei seit: 07.05.2009
Beiträge: 226
Entwicklungsumgebung: Visual Studio 2010 Pro

Themenstarter Thema begonnen von sharpType

sharpType ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Moin,

danke für die Tips, jetzt hab ich das mit dem Compare-Dings auch halbwegs verstanden, aber ich glaube trotzdem das meine Lösung wieder die "umständliche" Variante ist, aber sie geht^^

C#-Code:
public class AscendingComparer : IComparer
    {
        public int Compare(object objA, object objB)
        {
            string a = objA.ToString();
            string b = objB.ToString();

            char[] separatorID_1 = new char[] { '.' };
            char[] separatorID_2 = new char[] { '<' };

            string[] strFiltered_a = a.Split(separatorID_1);
            string[] strFiltered_b = b.Split(separatorID_1);

            strFiltered_a = strFiltered_a[1].Split(separatorID_2);
            strFiltered_b = strFiltered_b[1].Split(separatorID_2);

            if (Convert.ToInt32(strFiltered_a[0]) > Convert.ToInt32(strFiltered_b[0]))
                return (1);
            if (Convert.ToInt32(strFiltered_a[0]) < Convert.ToInt32(strFiltered_b[0]))
                return (-1);
            else
                return (0);

            //return String.Compare(strFiltered_a[0], strFiltered_b[0]);
        }
    }
23.10.2009 14:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
urga urga ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.10.2009
Beiträge: 21
Entwicklungsumgebung: VS EE 2008
Herkunft: Leipzig


urga ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ich würd das so machen:

C#-Code:
public class AscendingComparer : IComparer {
            public int Compare(object objA, object objB) {
                String a = (String)objA;
                String b = (String)objB;
                a = a.Substring(4);
                b = b.Substring(4);
                a = a.Remove(a.IndexOf("<"));
                b = b.Remove(b.IndexOf("<"));
                int x = Int32.Parse(a);
                int y = Int32.Parse(b);
                return x - y;
            }
        }
23.10.2009 14:40 Beiträge des Benutzers | zu Buddylist hinzufügen
sharpType sharpType ist männlich
myCSharp.de-Mitglied

Dabei seit: 07.05.2009
Beiträge: 226
Entwicklungsumgebung: Visual Studio 2010 Pro

Themenstarter Thema begonnen von sharpType

sharpType ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

geschockt danke
23.10.2009 14:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.498
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo sharpType,

ArrayList gehört in die Mottenkiste und sollte wie alle untypisierten Collections aus System.Collections nicht mehr benutzt werden. Verwende stattdessen List<T> und alle anderen typisierten Collections aus System.Collections.Generic.

herbivore
24.10.2009 11:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 3 Jahre.
Der letzte Beitrag ist älter als 3 Jahre.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 26.05.2013 11:36