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
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
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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.
Hallo pata1990,
verstehe ich das richtig, dass du uns nach einem Algorithmus fragst?
Dann verweise ich auf die Stichwörter: Sortieren, Bubble-Sort
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
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
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Du sollst doch nach Stringlänge sortieren. Also sind es doch sowoeso integers.
Aber wie kann ich denn eine Liste mit BubbleSort sortieren?
Das geht doch eig nur mit Arrays oder ?
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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 > Fehlermeldung:
CopyTo ist nicht als abstrakt extern oder partiell gekennzeichnet und muss daher einen text deklarieren
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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;
}
}
}
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.
Deine Klasse 'Liste' schmeißt du jetzt erstmal komplett weg.
Ich könnte mir vorstellen, dass das mit zur Aufgabe gehört.
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
Mir stellt sich die Frage, was genau deine Aufgabe ist:
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 😁 ).
LaTino
[EDIT]: Achja, und BubbleSort stinkt 😉
"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)
Der Ausdrucksweise nach handelt sich es um eine Schulaufgabe o.Ä.
Linq/OrderBy() ist daher also nicht hilfreich.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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)