Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
foreach Schleife zum sortieren nach Buchstabenanzahl
pata1990
myCSharp.de - Member



Dabei seit:
Beiträge: 6

Themenstarter:

foreach Schleife zum sortieren nach Buchstabenanzahl

beantworten | zitieren | melden

Hallo,

ich bin grad am verzweifeln.
Ich benötige eine foreach schleife mit Hilfe von IEnumrable Interface das mir strings in einer Liste der Buchstabenanzahl nach sortiert.
IEnumarable is eher weniger das Problem, komme seid Stunden einfach nicht drauf wie ich diese foreach Schleife implementieren kann.

Vll hat hier ja jemand eine Idee

Mfg
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von pata1990 am .
private Nachricht | Beiträge des Benutzers
Ezio
myCSharp.de - Member

Avatar #avatar-3575.png


Dabei seit:
Beiträge: 196

beantworten | zitieren | melden

Hallo pata1990,
kannst du bitte deine Anforderung, dein Ist- und dein Soll-Stand etwas ausführlicher beschreiben, als in diesem einen verknoteten Satz?!
Eine List of string ist doch schon ein IEnumerable.

VG Ezio
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Hallo pata1990,

scheitert es an dem Foreach oder an dem, was du in dem Foreach machen sollst? Das hab ich noch nicht geschnallt. Im zweiteren Fall ist der Titel des Threads einfach irreführend.

Zu deinem zweiten Problem: Eine Liste hat eine Sort-Methode. Schau dir die mal an.

List<T>.Sort Method (Comparison<T>) und ein OrderBy hats auch noch :)

Gruss

Coffeebean
private Nachricht | Beiträge des Benutzers
pata1990
myCSharp.de - Member



Dabei seit:
Beiträge: 6

Themenstarter:

beantworten | zitieren | melden

Es muss auf jedenfalls eine foreach Schleife sein die die Liste sortiert.

Mein Aktueller Stand ist dass ich eine Liste angelegt habe welcher ich 4 Elemente mit Hilfe einer Add Funktion ein Wort im string Format zufüge.

Dieses muss nun mit Hilfe einer foreach Schleife sortiert werden. Daran scheitert es aktuell.
private Nachricht | Beiträge des Benutzers
Ezio
myCSharp.de - Member

Avatar #avatar-3575.png


Dabei seit:
Beiträge: 196

beantworten | zitieren | melden

Hallo pata1990,

verstehe ich das richtig, dass du uns nach einem Algorithmus fragst?
Dann verweise ich auf die Stichwörter: Sortieren, Bubble-Sort
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1044
Herkunft: Mainz

beantworten | zitieren | melden

Hi,

nun - eine List<string> kann bereits automatisch sortieren - mittels OrderBy. Ähnliches geht über Array.Sort.

Ich vermute, dass es sich hier um eine Schulaufgabe handelt - insofern empfehle ich an der Stelle einfach eine beliebige Implementierung des BubbleSort-Algorithmus. (siehe Google)

LG
private Nachricht | Beiträge des Benutzers
pata1990
myCSharp.de - Member



Dabei seit:
Beiträge: 6

Themenstarter:

beantworten | zitieren | melden

Bubblesort kenne ich so nur mit int
ist das mit strings auch möglich?
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Hallo pata1990,

du willst doch, wenn ich das richtig verstanden habe, die Länge eines Strings - und das ist wieder ein int.

[Hinweis] Bitte schau in die SDK-/MSDN-Doku

String.Length Property

Gruss

Coffeebean
private Nachricht | Beiträge des Benutzers
witte
myCSharp.de - Member



Dabei seit:
Beiträge: 966

beantworten | zitieren | melden

Du sollst doch nach Stringlänge sortieren. Also sind es doch sowoeso integers.
private Nachricht | Beiträge des Benutzers
pata1990
myCSharp.de - Member



Dabei seit:
Beiträge: 6

Themenstarter:

beantworten | zitieren | melden

Aber wie kann ich denn eine Liste mit BubbleSort sortieren?
Das geht doch eig nur mit Arrays oder ?
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Hallo pata1990,

du kannst über eine Liste genauso iterieren wie über ein Array. Hättest du dir auch nur ein Beispiel angeschaut, hättest du das sofort gesehen. Bitte zeige ein wenig Eigeninitiative.

[Hinweis] Bitte schau in die SDK-/MSDN-Doku
List<T>-Klasse

Du kannst dein Enumerable aber auch mit .ToArray() in ein Array konvertieren und dann darüber iterieren, wenn dir das lieber ist.

Gruss

Coffeebean
private Nachricht | Beiträge des Benutzers
pata1990
myCSharp.de - Member



Dabei seit:
Beiträge: 6

Themenstarter:

beantworten | zitieren | melden

Wenn ich wie in deiner Info beschrieben die CopyTo Methode anwenden möchte.
Habe ich folgenden Code

Innerhalb der Klasse Liste in welcher meine Liste erstellt wird und sich auch die Add Funktion befindet

        public void CopyTo(Inhalt[] array);

und in meiner Main

  Inhalt[] array = new Inhalt[4];
            l1.CopyTo(array);

            Console.WriteLine("Inhalt Array:");
            foreach(Inhalt t in array)
            {
                Console.WriteLine(t.Text);
            }
Nun bringt er mit aber den Fehler
Fehler
CopyTo ist nicht als abstrakt extern oder partiell gekennzeichnet und muss daher einen text deklarieren
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Hallo pata1990,

public void CopyTo(Inhalt[] array);

sieht verdächtig aus. Was genau machst du? Du solltest das CopyTo auf der Liste aufrufen. Und wieso iterierst du nicht über die Liste?

Gruss

Coffeebean
private Nachricht | Beiträge des Benutzers
pata1990
myCSharp.de - Member



Dabei seit:
Beiträge: 6

Themenstarter:

beantworten | zitieren | melden

Ich habe mal meinen bisherigen Code angehängt. Wie meinst du das mit iterierst du nicht über die Liste?
In der Liste sind wie unten zu sehen 4 Beliebige Texte welche am Ende dann sortiert ausgegeben werden sollen. Jetzt wollte ich es wie du schon meintest in ein Array kopieren und dann mit Hilfe von BubbleSort sortieren und ausgeben.
(Hat das dann eig überhaupt noch etwas mit IEnumerable und foreach schleife zu tun?)
Sry ich verzweifle grad so ein bisschen an dieser Aufgabe

class Program
    {
        static void Main(string[] args)
        {
            Liste l1 = new Liste();
            l1.Add("Arrrgh");
            l1.Add("Uharrghh");
            l1.Add("Grrr");
            l1.Add("Ugh");

            foreach (Inhalt t in l1)
            {
                Console.WriteLine(t.Text);
            }

            foreach (Inhalt t in l1)
            {
                
            }

            /*Inhalt[] array = new Inhalt[4];
            l1.CopyTo(array);

            Console.WriteLine("Inhalt Array:");
            foreach(Inhalt t in array)
            {
                Console.WriteLine(t.Text);
            }*/


            Console.ReadKey();
        }
    }

    class Liste : IEnumerable
    {
        //Deklaration
        List<Inhalt> l1;
        //Konsturktor
        public Liste()
        {
            l1 = new List<Inhalt>();
        }
        //AddMethode
        public void Add(string t)
        {
            Inhalt insert = new Inhalt(t);
            l1.Add(insert);
        }
        //Indexer
        public string this[string i]
        {
            get
            {
                string s = "nicht gefunden";
                foreach (Inhalt inhalt in l1)
                {
                    if (inhalt.Text == i)
                    {
                        s = inhalt.Text;
                    }
                }
                return s;
            }
        }

        public IEnumerator GetEnumerator()
        {
            foreach (Inhalt t in l1)
            {
                yield return t;
            }

        }

        public void CopyTo(Inhalt[] array);

    }


    class Inhalt
    {
        //Deklarierung
        string text;
        //Properties
        public string Text { get { return text; } }
        //Konstruktor
        public Inhalt(string t)
        {
            text = t;
        }
    }
}
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von pata1990 am .
private Nachricht | Beiträge des Benutzers
p!lle
myCSharp.de - Member

Avatar #avatar-3556.jpg


Dabei seit:
Beiträge: 1053

beantworten | zitieren | melden

Deine Klasse 'Liste' schmeißt du jetzt erstmal komplett weg.
Dann guckst du dir, wie von Coffeebean schon gesagt, die List<T>-Klasse an.
Damit kannst du arbeiten und alles machen, was du machen willst.
private Nachricht | Beiträge des Benutzers
Alf Ator
myCSharp.de - Member



Dabei seit:
Beiträge: 640

beantworten | zitieren | melden

Zitat von p!lle
Deine Klasse 'Liste' schmeißt du jetzt erstmal komplett weg.
Ich könnte mir vorstellen, dass das mit zur Aufgabe gehört.
private Nachricht | Beiträge des Benutzers
JuniorProgrammierer
myCSharp.de - Member



Dabei seit:
Beiträge: 35
Herkunft: Würzburg

beantworten | zitieren | melden

Also kannst auch so lösen .... ABER weis nicht ob es in deiner Aufgabe erlaubt ist.

static void Main(string[] args)
        {
            List<string> l1 = new List<string>();
            l1.Add("eins");
            l1.Add("ei");
            l1.Add("ein");
            l1.Add("e");

            foreach (string value in from wort in l1 orderby wort.Length select wort)
            {
                Console.WriteLine(value);

            }
            Console.ReadLine();
        }

Ergebnis: e, ei, ein, eins


je nach dem kannst gerne ausprobieren
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3062
Herkunft: Thüringen

beantworten | zitieren | melden

Mir stellt sich die Frage, was genau deine Aufgabe ist:

- sollst du dass Array manuell kopieren (daher, vielleicht als Schablone, die merkwürdige Methodendeklaration) und dann ein extra von dir geschriebenes Sort drüberjagen?
- oder geht es nur um das Ergebnis?

Weil C# natürlich bereits Sortieralgorithmen zur Verfügung stellt, mit denen man die Aufgabe ohne extra-Klasse in einer Zeile erledigen kann.


var myList = new List<string> { "Arrrgh", "Uharrghh", "Grrr", "Ugh" };
var sortedList = myList.OrderBy(p => p.Length).AsEnumerable();
//fertig.

Weshalb ich stark vermute, dass du Punkt 1 erledigen sollst (sonst hätte ich den Code auch nicht gepostet ).

1. Schreib' dir ein BubbleSort mit int.
2. Erweitere dein Bubblesort so, dass du nicht über int, sondern über eine Objekteigenschaft, die int ist, sortierst.
3. Füttere dein erweitertes Bubblesort mit den strings und sortiere nach deren Länge (= eine int-Eigenschaft)
4. Profit.

LaTino
[EDIT]: Achja, und BubbleSort stinkt
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von LaTino am .
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16234

beantworten | zitieren | melden

Der Ausdrucksweise nach handelt sich es um eine Schulaufgabe o.Ä.

Linq/OrderBy() ist daher also nicht hilfreich.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3062
Herkunft: Thüringen

beantworten | zitieren | melden

Ja, dachte ich auch, deshalb der 4-Punkte-Plan - sollte ihm eine Richtung weisen. Ich würde nichtmal denken, dass der Lehrer (?) die Beschäftigung mit List<> erwartet. Sieht eher nach einer alten C-Aufgabe aus, die man unvernünftigerweise in C# umsetzen lassen will.

LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
private Nachricht | Beiträge des Benutzers