"Unique" für List?

16/10/2008 - 13:58 von Michaela Meier | Report spam
Hi,

Gibt es eine (eingebaute) Methode, um aus einer Liste alle mehrfach
vorkommenden Elemente zu löschen?
In PHP gibt es z.B. array_unique

Wie ich das Problem "zu Fuß" erledige, weiß ich. Ich würde nur gerne
wissen, ob ich ein paar nette Features von .net übersehe, weil ich mal
wieder nach den falschen Worten suche ;-)

Danke
 

Lesen sie die antworten

#1 Frank Dzaebel
16/10/2008 - 15:11 | Warnen spam
Hallo Michaela,

Gibt es eine (eingebaute) Methode, um aus einer Liste
alle mehrfach vorkommenden Elemente zu löschen?



Du kannst zum Beispiel die Union-Erweiterungs-
Methode benutzen. Beachte aber den Unterschied
von Referenzgleichheit und Wertegleichheit, der
hier zum Tragen kommt:

[Enumerable.Union-Methode (System.Linq)]
http://msdn.microsoft.com/de-de/lib...union.aspx

private void Form1_Load(object sender, EventArgs e)
{
// Beispiel 1:
List<Person> personen = new List<Person>();
personen.Add(new Person("Gustav", new DateTime(1001,1,1)));
personen.Add(new Person("Donald", new DateTime(1002,2,2)));
personen.Add(new Person("Tick", new DateTime(1003,3,3)));
personen.Add(new Person("Trick", new DateTime(1004,4,4)));
personen.Add(new Person("Donald", new DateTime(1002,2,2)));
var psUnique = new List<Person>().Union(personen);

// Beispiel 2:
List<string> liste = new List<string>();
liste.AddRange(new string[]{"Eins","Zwei","Drei", "Zwei", "Vier"});
var lsUnique = new List<string>().Union(liste);
}

class Person
{
public Person(string vorname, DateTime geburt)
{
this.Vorname = vorname; this.Geburtsdatum = geburt;
}
public string Vorname { get; set; }
public DateTime Geburtsdatum { get; set; }
public override string ToString()
{
StringBuilder sb = new StringBuilder();
foreach (PropertyDescriptor pd in
TypeDescriptor.GetProperties(typeof(Person)))
{
string val = pd.GetValue(this).ToString();
sb.AppendFormat("{0},", val);
}
return sb.ToString();
}
public override int GetHashCode()
{
return (this.ToString().GetHashCode());
}
public override bool Equals(object obj)
{
return this.ToString().Equals(obj.ToString());
}
}

Nebenbei ggf. interessant:

[Dictionary generisch einschrànken]
http://dzaebel.net/DictionaryConstraint.htm


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen