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

 
Beiträge zu diesem Thema Autor Datum
 ArrayList nur nach Teil der enthaltenen Werte sortieren sharpType 23.10.2009 12:57
 RE: ArrayList nur nach Teil der enthaltenen Werte sortieren urga 23.10.2009 13:15
 RE: ArrayList nur nach Teil der enthaltenen Werte sortieren KroaX 23.10.2009 13:20
 RE: ArrayList nur nach Teil der enthaltenen Werte sortieren urga 23.10.2009 13:22
 RE: ArrayList nur nach Teil der enthaltenen Werte sortieren sharpType 23.10.2009 14:25
 RE: ArrayList nur nach Teil der enthaltenen Werte sortieren urga 23.10.2009 14:40
 RE: ArrayList nur nach Teil der enthaltenen Werte sortieren sharpType 23.10.2009 14:41
 RE: ArrayList nur nach Teil der enthaltenen Werte sortieren herbivore 24.10.2009 11:08

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.571
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. 20.06.2013 00:45