Laden...

Array subtrahieren?

Erstellt von 4noxx vor einem Jahr Letzter Beitrag vor einem Jahr 480 Views
4
4noxx Themenstarter:in
2 Beiträge seit 2023
vor einem Jahr
Array subtrahieren?

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")											
6.911 Beiträge seit 2009
vor einem Jahr

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!"

126 Beiträge seit 2023
vor einem Jahr

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();

ausführbares Beispiel auf dotnetfiddle

Hat die Blume einen Knick, war der Schmetterling zu dick.

187 Beiträge seit 2009
vor einem Jahr

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();
        }
    }
6.911 Beiträge seit 2009
vor einem Jahr

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!"

4
4noxx Themenstarter:in
2 Beiträge seit 2023
vor einem Jahr

ich bedanke mich erstmal herzlich. werde am wochenende alles einmal durchtesten um zu verstehen 😃

gruß