List<int> tab = new List<int> { 0, 1, 2, 3, 4, 5, 4, 3, 2 };
//Metoda "where()" zwraca tylko te elementy, które spełniaja warunek dot.
poj elementu
List<int> liczby_wieksze_niz_3 = tab.Where(x => x > 3).ToList();
// 4, 5, 4, // funkcja "x > 3" będzie uruchamiana dla każdego kolejnego elementu z "tab"
List<int> liczby_w_2_polowce = tab.Where((wart, idx) => idx >=
tab.Count/2).ToList();
// 4, 5, 4, 3, 2
//Kolekcję zwracaną przez select(), można również użyć bezpośrednio w pętli foreach.
int suma_liczb_wiekszych_niz_3 = 0;
foreach (int wart2 in tab.Where(wart => wart > 3))
suma_liczb_wiekszych_niz_3 += wart2; // 13 = 4 + 5 + 4
//metoda "select()" słuzy do wyłuskiwania potrzebnych danych z pojedynczych elementów w kolekcji.
// Przy okazji można dokonać lekkiego ich przetwarzania.
List<string> tab_txt = tab.Select(wart => (wart + 1).ToString()).ToList();
// "1", "2", "3", "4", "5", "6", "5", "4", "3"
string[] tab_idx_nazwy = tab.Select((wart, idx) => idx.ToString() + "_" + wart.ToString()).ToArray();
// "0_0", "1_1", "2_2", "3_3", "4_4", "5_5", "6_4", "7_3", "8_2"
// Innymi przydatnymi funkcjami są Skip(), Take(), Reverse().
// Skip(x) zwraca kolekcję pomijając x pierwszych obiektów.
// Take(x) zwraca kolekcję zawierającą tylko x pierwszych elementów.
// Obie te funkcje gdyby nie znalazły odpowiedniej liczby elementów zwrócą pusty pojemnik.
// Reverse() zwraca pojemnik z elementami w odwrotnej kolejności.
int[] elementy_trzeci_i_drugi = tab.Skip(1).Take(2).Reverse().ToArray();
// 2, 1
// Funkcje Select() i Where() często zagnieżdża się.
int[] tab_bez_ekstremow = tab.Where(wart => wart < tab.Max()).Where(wart =>
wart > tab.Min()).ToArray();
// 0, 1, 2, 3, 4, 5, 4, 3, 2