LINQ w Microsoft Visual C# zadania Zestaw danych: int[] tabl = -1, -2, 0, 1, 2, 3 ; 1. Wyświetlić wszystkie liczby zawarte w tablicy tabl[]. foreach (var x in tabl) 2. Wyświetlić wyłącznie liczby ujemne zawarte w tablicy tabl[]. foreach (var x in from w in tabl where w < 0 select w) 3. Wyświetlić rosnąco liczby ujemne zawarte w tablicy tabl[]. foreach (var x in from w in tabl where w < 0 orderby w select w) 4. Wyświetlić wszystkie liczby dodatnie zawarte w tablicy tabl[] w porządku malejącym. foreach (var x in from w in tabl where w >= 0 orderby w descending select w) 5. Obliczyć sumę wszystkich liczb zawartych w tablicy tabl[]. Console.WriteLine(tabl.Sum()); 6. Obliczyć sumę wszystkich liczb dodatnich zawartych w tablicy tabl[]. Console.WriteLine(tabl.Where((p) => p >= 0).Sum()); 7. Obliczyć sumę wszystkich liczb parzystych dodatnich zawartych w tablicy tabl[].
Console.WriteLine(tabl.Where((p) => p >= 0 && p % 2 == 0).Sum()); lub Console.WriteLine((from x in tabl where x >= 0 && x % 2 == 0 select x).sum()); 8. Wyświetlić wszystkie liczby z tablicy tabl[] z wyjątkiem najmniejszej (najmniejszych) i największej (największych). foreach (var x in from w in tabl where w > tabl.min() && w < tabl.max() select w) 9. Wyświetlić wartości bezwzględne liczb zawartych w tablicy tabl[]. foreach (var x in from w in tabl select Math.Abs(w)) 10. Obliczyć wartość średnią z liczb dodatnich zawartych w tablicy tabl[]. Console.WriteLine(tabl.Where((x) => x >= 0).Average()); 11. Obliczyć liczbę unikatowych wartości w kolekcji tabl(). Console.WriteLine(tabl.Distinct().Count());
Zestaw danych: int[] tabl1 = -1, -2, 0, 1, 2, 3; int[] tabl2 = 6, 3, 1, 0, -1, 3 ; 12. Wyświetlić zawartość tablic tabl1[] i tabl2[]. foreach (var x in tabl1.concat(tabl1)) 13. Wyświetlić wartości unikatowe (bez powtórzeń) z tablic tabl1[] i tabl2[]. foreach (var x in tabl1.union(tabl2)) 14. Wyświetlić wartości wspólne dla obu tablic. foreach (var x in tabl1.intersect(tabl2)) 15. Obliczyć ile jest wartości wspólnych dla obu tablic. Console.WriteLine(tabl1.Intersect(tabl2).Count()); 16. Obliczyć sumę wartości ujemnych zawartych w tablicach tabl1[] i tabl2[]. Console.WriteLine(tabl1.Concat(tabl2).Where((x) => x < 0).Sum()); 17. Wyświetlić wartości różne (nie wspólne) zawarte w tablicach tabl1[] i tabl2[]. foreach (var x in tabl1.concat(tabl2).except(tabl1.intersect(tabl2)))
Zestaw danych: int[] tablica_liczb = -1, -2, 0, 1, 2, 3; string[] tablica_ciagow = "6", "3", "1", "0", "-1", "3" ; 18. Wyświetlić wspólne wartości liczbowe dla obu tablic. foreach (var x in tablica_liczb.intersect(tablica_ciagow.select ((p) => Convert.ToInt32 (p)))) 19. Obliczyć sumę wartości liczbowych dodatnich zawartych w tablicy tablica_ciagow(). Console.WriteLine(tablica_ciagow.Select((p) => Convert.ToDouble(p)).Where((p) => p >= 0).Sum());
Zestaw danych: struct liczby_opisy public int liczba; public string opis; liczby_opisy dodaj_opis(int liczba, string opis) liczby_opisy lopis ; lopis.liczba = liczba; lopis.opis = opis; return lopis; void oblicz() int[] liczby = 0, 1, 2, 3, 9; List<liczby_opisy> opisy = new List<liczby_opisy>(); opisy.addrange(new List<liczby_opisy> dodaj_opis(0, "zero"), dodaj_opis(1, "jeden"), dodaj_opis(2, "dwa"), dodaj_opis(3, "trzy"), dodaj_opis(4, "cztery"), dodaj_opis(5, "pięć"), dodaj_opis(6, "sześć"), dodaj_opis(7, "siedem"), dodaj_opis(8, "osiem"), dodaj_opis(9, "dziewięć")); 20. Napisz zapytanie LINQ w procedurze oblicz() zwracające liczby i ich opisy na bazie zawartości powyższych kolekcji. foreach (var x in from liczba in liczby join opis in opisy on liczba equals opis.liczba select new wartosc = liczba, opis_slowny = opis.opis ) Console.WriteLine(x.wartosc + " => " + x.opis_slowny); 21. Napisz zapytanie LINQ w procedurze oblicz() zwracające parzyste liczby i ich opisy na bazie zawartości powyższych kolekcji. foreach (var x in from liczba in liczby join opis in opisy on liczba equals opis.liczba where liczba % 2 == 0 select new wartosc = liczba, opis_slowny = opis.opis ) Console.WriteLine(x.wartosc + " => " + x.opis_slowny);
22. Napisz zapytanie LINQ w procedurze oblicz() zwracające parzyste liczby i ich opisy na bazie zawartości powyższych kolekcji posortowane względem wartości liczbowych malejąco. foreach (var x in from liczba in liczby join opis in opisy on liczba equals opis.liczba where liczba % 2 == 0 orderby liczba descending select new wartosc = liczba, opis_slowny = opis.opis ) Console.WriteLine(x.wartosc + " => " + x.opis_slowny);
Zestaw danych: string wyrazy = "Ala MA kota i Ala ma psa"; 23. Wyświetlić statystykę występowania wyrazów w zdaniu powyżej (bez rozróżniania wielkości liter). foreach (var x in from y in (from t in wyrazy.tolower().split(' ').Distinct() select t) select new termin = y, ile = (from p in wyrazy.split(' ') where p.tostring().tolower() == y.tostring().tolower() select p).count()) Console.WriteLine(x.termin + " => " + x.ile); Console.WriteLine("========= lub ========="); foreach (var x in from y in wyrazy.split(' ') group y by y.tolower() into grp select new ile = grp.count(), y2 = grp.key ) Console.WriteLine(x.y2 + " => " + x.ile); 24. Obliczyć liczbę unikatowych wyrazów w zdaniu powyżej (bez rozróżniania wielkości liter). Console.WriteLine(wyrazy.ToLower().Split(' ').Distinct().Count()); Zestaw danych: int[] pola_kw = 3, 4, 5, 10, 12, 4, 1; int[] pola_tr = 5, 1, 9, 8, 10 ; 25. Napisać program, który obliczy ile jest pól trójkątów, których wartość nie jest większa od średniej wartości pól o wartości parzystej z kolekcji pól kwadratów double k = pola_tr.where((p) => p <= (pola_kw.where((x) => x % 2 == 0).Average())).Count();
Artur Niewiarowski Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska Kraków 2014