C#: Von mehreren Variablen rausfinden, ob zwei identisch sind?

Mindestens? Genau? Höchstens?

Es sollte jeder string einfach nur einmal vorkommen. Also dass weder zwei, noch mehr als zwei strings identisch sind

4 Antworten

Für folgende Lösung benötigst du ein Set (Datenstruktur).

Du könntest zum Beispiel alle Werte (Variablen) der Reihe nach (in einer Schleife) durchgehen. Mit jedem Wert machst du folgendes:

Du guckst, ob der aktuelle Wert bereits im Set enthalten ist. Ist dies der Fall, hast du herausgefunden, dass zwei Werte identisch ist und du hast die Lösung. Ist der aktuelle Wert nicht im Set enthalten, fügst du ihn hinzu und machst dann mit dem nächsten Wert weiter. Wenn du alle Werte durch hast und bisher keine Lösung gefunden hast, gibt es keine doppelten Werte (= zwei identische Variablen) und du hast ebenfalls die Lösung.

Woher ich das weiß:eigene Erfahrung

Aber was ist wenn drei bis acht identisch sind? Soll es dann false geben?

Woher ich das weiß:Hobby – Ich beschäftige mich in meiner Freizeit gerne mit PCs.

Ja. Es sollte nur true sein, wenn jeder maximal einmal vorkommt

0
if (Variable1 != Variable2 != Variable3 != ...) {};

Der Vergleichsoperator kann nur zwei Vergleichsobjekte auf einmal bedienen. Du müsstest also wenn schon mit logischen Verknüpfungsoperatoren (AND, OR, ...) arbeiten.

if (variable1 != variable2 && variable1 != variable3 && /* etc. ... */)

Das arbeitet schnell in viel Schreibarbeit aus.

Eine kurze Lösung wäre Linq. Du könntest erst alle Variablen in einer Liste speichern, die Duplikate aussortieren lassen und dann die Listenlängen vergleichen.

var list = new List<SomeType> { variable1, variable2, /* ... */ };
var hasDuplicates = list.Count != list.Distinct().Count();

Ebenso einfach wäre der Weg mit dem von sique3 bereits erwähnten Set:

var data = new HashSet<SomeType>();
data.Add(variable1);
data.Add(variable2);
// etc. ...

var hasDuplicates = data.Count != numberOfVariables;

Da diese Datenstruktur doppelte Werte nicht aufnimmt (das prüft die Add-Methode selbst), müsste sie später weniger Elemente beinhalten, als es entsprechende Variablen gibt.

Die dritte Option wäre es, die Variablen in einer Liste einzuordnen und beim Hinzufügen selbst zu prüfen, ob es sie schon gibt:

bool HasDuplicates(params SomeType[] values)
{
  var list = new List<SomeType>();

  foreach (value in values)
  {
    foreach (var entry in list)
    {
      if (value == entry)
      {
        return true;
      }
    }

    list.Add(value);
  }

  return false;
}

Der Aufruf würde ungefähr so aussehen:

// define some variables of SomeType ...
var hasDuplicates = HasDuplicates(someType, someOtherType, /* etc. ... */);

Die letzte Option ließe sich natürlich noch in anderen Variationen schreiben.

Es hierfür sicher 100 Möglichkeiten.

Ich würde alle strings in 2 Listen packen, ein array geht hier auch.

List<string> DatenListe;
List<string> LoopListe;

Beide haben alle strings in der selben Reihenfolge.

DatenListe.Add("Schule");
LoopListe.Add("Schule");
DatenListe.Add("Garten");
LoopListe.Add("Garten");
//usw..

Nun eine Methode die eine Liste looped und in der anderen checkt.

bool CheckDoppelteStrings()
{
  for(i=0;i<DatenList.Count;i++)
  {
  for(j=0;j<LoopList.Count;j++)
  {
    if(i==j)//check nicht dich selbst
    { 
      continue;
    }
    if(DatenListe[i] == LoopListe[j])
    }
      return true;
    }
  }
return false;//keine doppelten vorhanden
}

Ich hab's nicht getestet aber denke das sollte gehen.

Woher ich das weiß:Berufserfahrung

Was möchtest Du wissen?