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
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.
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.
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
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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
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