Hallo,
ich versuche mich gerade in C#. Anhand von ein paar praxisnahen Ideen, versuche ich das einlernen etwas Spannender zu machen.
Frage: Ich habe 2 Arrays, Obstkorb und Obstliste. Ich möchte nun in einem dritten Array alle Obstsorten aus Liste Obstkorb die nicht in der Obstliste stehen, in diesem Beispiel Birne und Apfel. Beiß mir da irgendwie die Zähne aus....
string[] Obstkorb = {"Apfel", "Orange", "Moehre", "Banane", "Birne")
string[] Obstliste = {"Orange", "Moehre", "Banane", "Erdbeeren", "Ananas", "Traube", "Zitrone", "Pfirsich")
Hallo 4noxx,
am einfachsten und mit .NET-Klassen geht via HashSet. Schau dir diesen Typ einmal an und du siehst die zur Verfügung gestellten Mengenoperationen.
Wenn du es jedoch -- zu Lernzwecken -- lieber händisch durchprogrammieren willst, so ist ein naiver Ansatz einfach für jedes Element der einen Liste in der Zielliste zu Suchen ob es dort vorhanden ist od. nicht. Entweder (ganz) naiv per verschachtelten Schleifen od. etwas besser über die Array.Find
-Methode.
Probiers einmal aus, falls du hängst helfen wir gerne weiter.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Das geht mit Linq so
using System.Linq;
...
var Obstkorb = new [] { "Apfel", "Orange", "Moehre", "Banane", "Birne" };
var Obstliste = new [] { "Orange", "Moehre", "Banane", "Erdbeeren", "Ananas", "Traube", "Zitrone", "Pfirsich" };
var Rest = Obstkorb.Except( Obstliste ).ToArray();
Hat die Blume einen Knick, war der Schmetterling zu dick.
Eine Möglichkeit
internal class Program
{
static string[] obstkorb = { "Apfel", "Orange", "Moehre", "Banane", "Birne" };
static string[] obstliste = { "Orange", "Moehre", "Banane", "Erdbeeren", "Ananas", "Traube", "Zitrone", "Pfirsich" };
static void Main(string[] args)
{
string[] obstergebnis = Obstfilter();
foreach (string obst in obstergebnis)
{
Console.WriteLine(obst);
}
Console.ReadKey();
}
static string[] Obstfilter()
{
List<string> obstkorbliste = obstkorb.ToList();
for (int i = obstkorbliste.Count - 1; i >= 0; i--)
{
if (obstliste.Contains(obstkorbliste[i]))
{
obstkorbliste.Remove(obstkorbliste[i]);
}
}
return obstkorbliste.ToArray();
}
}
Hallo Caveman,
die vorgestellte Lösung funktioniert, jedoch sollte bei Algorithmen auch die Aufwandsklasse berücksichtigt werden. Hier ist diese recht hoch. Bei kleinen Mengen mag das kein Problem darstellen, aber es gibt effizientere Lösungen wie jene von BlonderHans od. via HashSet.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
ich bedanke mich erstmal herzlich. werde am wochenende alles einmal durchtesten um zu verstehen 😃
gruß