Linq a vyhledání jedinečných hodnot

Petr Wiedemann, 5. červen 2010

Představme si situaci, kdy máme textovou proměnou, která obsahuje hodnoty oddělené určitým znakem. Z této proměnné budeme chtít získat pouze jedinečné hodnoty, seřadit je podle abecedy a odstranit případné bílé znaky na začátku a konci. Pokud do tohoto úkolu zapojíme Linq, stačí nám na to jen jeden řádek kódu.

V následujícím příkladu máme proměnou src, která obsahuje hodnoty oddělené čárkou. Pro lepší čitelnost jsou metody Linqu rozepsány na samostatné řádky.

string src = "A1, A2,B1, C1, C2,A2,B1, C1, A0,A3,A9,A8,A7,A6";
var values = src.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(x => x.Trim())
    .Distinct()
    .OrderBy(x => x)
    .ToArray();

Console.WriteLine(String.Join(",", values));
  1. rozdělení hodnot do pole
  2. Select(x => x.Trim()) vrací hodnotu bez případných bílých znaků na začátku nebo konci
  3. Distinct() vrací pouze jedinečné hodnoty
  4. OrderBy(x => x) všechny hodnoty seřadí podle abecedy
  5. ToArray() z výsledku předchozí metody vytvoří pole, které nakonec použijeme pro vypsání výsledku