Sprache: C#
Diese Erweiterung nimmt eine Liste und ermittelt aus dieser durch Übergabe eines Schlüssels eine Liste mit eindeutigen Werten.
Beispiel:
[code]
class Program
{
static void Main()
{
List<Person> personList = new List<Person>
{
new Person{Name = "Gü"},
new Person{Name = "Andrea"},
new Person{Name = "Gü"}
};
List<Person> myUniqueList = personList.Unique(i => i.Name);
}
}
public class Person
{
public string Name { get; set; }
}
[/code]
Im Ergebnis werden nur eindeutige Werte in Bezug auf den Namen zurückgegeben.
using System;
using System.Collections.Generic;
using System.Linq;
namespace gfoidl.Linq
{
public static class LinqExtensions
{
public static List<T> Unique<K, T>(this List<T> inputList, Func<T, K> func)
{
#region Input validation
if (func == null)
throw new ArgumentNullException("Key selector function cannot be null");
if (inputList == null)
return null;
if (inputList.Count == 0)
return new List<T>();
#endregion
var grp = inputList.GroupBy(func);
return grp.Select(g => g.First()).ToList();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
namespace gfoidl.Linq
{
public static class LinqExtensions
{
public static List<T> Unique<K, T>(this List<T> inputList, Func<T, K> func)
{
#region Input validation
if (func == null)
throw new ArgumentNullException("Key selector function cannot be null");
if (inputList == null)
return null;
if (inputList.Count == 0)
return new List<T>();
#endregion
var grp = inputList.GroupBy(func);
return grp.Select(g => g.First()).ToList();
}
}
}
Alte URL:
/snippet/linq-erweiterung-fuer-eindeutige-liste/1037
Bei einer Bewertung mit 1 wäre die Angabe einer Begründung hilfreich. Oder hat das mit mir zu tun?
Ich denke auch, dass eine Begründung angebracht wäre.
Ich finde die schlechte Bewertung nicht gerechtfertigt.
Vielleicht kommt die schlechte Bewertung auch durch das fehlerhafte Demo, was ich aber auch für ungerechtfertigt halte. Ich hab’s mal korrigiert und um die Ausgabe von myUniqueList erweitert: fooList = new List
{ myUniqueList = fooList.Unique(i => i.Name);
[code]class Program
{
static void Main()
{
List
new Person { Name = „Günther“ },
new Person { Name = „Andrea“ },
new Person { Name = „Günther“ }
};
List
foreach (var person in myUniqueList)
{
Console.WriteLine(person.Name);
}
// Verhindert das selbsttätige Schließen des Konsolenfensters.
Console.WriteLine(„nPress any key to terminate the program.“);
Console.ReadKey();
}
}
class Person
{
public string Name { get; set; }
}[/code]
AHA! Spitze Klammern werden hier verschluckt. Dann war dein Demo nicht fehlerhaft, Günther. Ich möchte mich entschuldigen.
Danke Rainer!
Hab das Beispiel jetzt selbst HTML-Encoded (< und >).
schon mal die Funktion IEnumerable – Distinct() gesehen?