Laden...

Arrays vergleichen und Unterschiedliche Werte ausgeben

Erstellt von Kjell vor einem Jahr Letzter Beitrag vor einem Jahr 451 Views
K
Kjell Themenstarter:in
7 Beiträge seit 2022
vor einem Jahr
Arrays vergleichen und Unterschiedliche Werte ausgeben

Hallo,

ich würde gerne in C# zwei Arrays vergleichen und die Unterschiedlichen Einträge ausgeben lassen.

z.B:
Array 1:
Software 1
Software 2
Software 3

Array 2:
Software 1
Software 3

Ausgabe:
Software 2

Leider komme ich in der Umsetzung nicht weiter und benötige Hilfe.

Danke

T
2.219 Beiträge seit 2008
vor einem Jahr

Wie sieht den dein aktueller Ansatz aus?
Der einfachste Ansatz wäre durchlaufen der Arrays und prüfen ob die jeweiligen Werte identisch sind.
Dafür brauchst du nur eine for Schleife.

Hierbei musst du aber beachten, dass die Arrays gleich groß sein müssen.
Wenn diese unterschiedlich groß sind, musst du dies noch beachten!

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

K
Kjell Themenstarter:in
7 Beiträge seit 2022
vor einem Jahr

Ich poste hier mal den ganzen Code(Einige Werte musste ich ändern aber das Prinzip bleibt gleich):


using System;
using System.IO;
using System.Threading;
using static System.Net.Mime.MediaTypeNames;
using static System.Net.WebRequestMethods;

namespace Softwarefilter
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader sr = new StreamReader("file.csv");

            char trennzeichen = ',';
            string[] software;
            string zeile;
            string[] defaultsoftware = new string[] {  
            "Software1",
            "Software2",
            "Software3",
            "Software4",
            "Software5",
            "Software6",
            "Software7",
            "Software8",
            "Software9",
            "Software10"
            };

            try
            {
                Console.WriteLine("Softwarezuweisung");
                Console.WriteLine("-----------------");

                while (!sr.EndOfStream)
                {
                    // Zeilenweise
                    zeile = sr.ReadLine();
                    software = zeile.Split(trennzeichen);

                    
                    for (int i = 0; i < software.Length; i++)
                    {
                        for (int j = 0; j < software.Length; j++)
                        {
                            if (j == 1)
                                Console.WriteLine(software[i]);
                        }                        
                    }                    
                }
            }    
            catch(Exception e) 
            {
                Console.WriteLine(e.Message);
            }
            finally 
            {
                if (sr != null)
                {
                    sr.Close();
                }
            }

            Console.ReadKey();
        }
            

            
    }
}

Hier möchte ich noch das Array software mit defaultsoftware vergleichen und die Unterschiedliche Software ausgeben.

16.807 Beiträge seit 2008
vor einem Jahr

Solche Basisfragen werden eigentlich in den Grundlagen von C# erklärt 😉
Daher kann man sowas auch mit sehr einfachen Google Suchbegriffen erklärt bekommen: Google Suche nach "compare two string arrays c#"

In .NET gibt es für Dein Vorhaben fertige Methoden. Dazu einfach einen Blick in die Doku werfen.
Enumerable.Except Method (System.Linq)

Und aufgrund Deines Code-Vorgehens empfehle ich Dir vorsichtshalber auch das hier:
Reference types - C# Reference

K
Kjell Themenstarter:in
7 Beiträge seit 2022
vor einem Jahr

Hallo,

ich habe mir die Links angeschaut und durchgelesen. Wirklich gut erklärt ist das meiner Meinung nach nicht.

Ich habe nun schon verschiedene Zusammensetzungen des Befehls getestet, aber leider ist die Ausgabe nie 100% richtig. Außerdem ist mir nicht ganz klar an welcher Stelle ich den Code am besten einbaue.

Ich würde mich über weitere Hilfe freuen

A
764 Beiträge seit 2007
vor einem Jahr

Hallo Kjell

Erstmal wäre es sinnvoll dein Problem auf das wesentliche zu reduzieren:
(Ich habe bei dem Beispiel mal List<T> genommen, statt string-Arrays)


        static void Main(string[] args)
        {
            var list1 = new List<string>
            {
                "Software 1",
                "Software 2",
                "Software 3"
            };

            var list2 = new List<string>
            {
                "Software 1",
                "Software 3"
            };

            var differences = GetDifferences(list1, list2);

            Console.ReadKey();
        }
            
        private IEnumerable<string> GetDifferences(List<string> list1, List<string> list2)
        {
            // hier Listen vergleichen
            return new List<string>();
        }

Das ganze könntest du auch ganz hervorragend mit UnitTests machen:
C# unit test tutorial - Visual Studio (Windows)

Zum Listenvergleich kannst du Linq verwenden:
Language-Integrated Query (LINQ) (C#)

Es ist aber auch eine gute Übung, so einen Listenvergleich händisch umzusetzten. Wenn deine UnitTests funktionieren kannst du das gut machen und deine eigene Implementierung damit testen.

Zum Arbeiten mit csv-Dateien empfehle ich eine vorhandene Lösung zu verwenden, zum Beispiel:
https://www.nuget.org/packages/CsvHelper/

Beim programmieren gilt: aller Anfang ist schwer. Man muss viel Lesen, ausprobieren und verstehen. Aber immer wenn man dann einen Schritt weiterkommt und etwas verstanden und gelernt hat, macht es riesenspaß.

Viele Grüße
Alf