/
otus_basic_24_08
/
Linq
Обзор
Документация
Войти
/
otus_basic_24_08
/
Linq
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
master
linq/Program.cs
212 строк
11 KB
Evgeny
23012025
23 янв 2025, 16:36
23 янв 2025, 16:36
10ea51d
Код
Авторство
О чём код?
using System.Xml.Schema; namespace Ling { internal class Program { static IEnumerable<string> Method11(string[] strings) { return (from str in strings where str != null select str).ToList(); } static int Method12(string[] strings) { return strings.Where(s => s != null).Min(s => s.Length); } static IEnumerable<IGrouping<char, Student>> Method21(Student[] students) { return students.OrderBy(s => s.Name).GroupBy(s => s.Name[0]); } static IEnumerable<IGrouping<char, Student>> Method22(Student[] students) { return students.OrderByDescending(s => s.Name).GroupBy(s => s.Name[0]); } static void Method31(Department[] departments, Worker[] workers) { var results = workers.Join(departments, w => w.Department, d => d.Id, (w, d) => new { Id = w.Id, NameDepart = d.Name, Salary = w.Salary }); foreach (var item in results) { Console.WriteLine($"Id={item.Id} NameDepart={item.NameDepart} Salary={item.Salary}"); } } static void Method32(Department[] departments, Worker[] workers) { var results = departments.GroupJoin( workers, d => d.Id, w => w.Department, (d, works) => new { Id = d.Id, NameDepart = d.Name, Salary = Math.Round(works.Average(w=>w.Salary), 2)} ); foreach (var item in results) { Console.WriteLine($"Id={item.Id} NameDepart={item.NameDepart} Salary={item.Salary}"); } } static bool Method41(string[] strings) { return strings.Any(s => s == "the"); } static IEnumerable<int> Method42(string[] strings) { return strings.Select(s => s.Length); } static IEnumerable<Student> Method51(Student[] students1, Student[] students2) { return students1.Intersect(students2); } static IEnumerable<Student> Method52(Student[] students1, Student[] students2) { return students1.Union(students2); } static IEnumerable<Student> Method53(Student[] students1, Student[] students2) { return students1.GroupBy(s=>s).Where(s=>s.Count()>1).Select(s=>s.Key).ToList(). Union(students2.GroupBy(s => s).Where(s => s.Count() > 1).Select(s => s.Key).ToList()); } static void Main(string[] args) { //1 Дана коллекция: string[] words = ["the", "quick", "brown", "fox", "jumps", null]; // 1.1 Напишите linq-запрос, которые будет возвращать все значения, кроме null. Console.WriteLine("Пункт 1.1"); Console.WriteLine("1.1: " + string.Join(", ", Method11(words))); // 1.2 Напишите запрос, который вернет минимальную длину слова из запроса ниже(без учета null). Console.WriteLine("Пункт 1.2"); Console.WriteLine("1.2: " + Method12(words)); //2 Дан массив студентов.Опишите класс студента самостоятельно. У студента есть идентификатор, имя и номер // группы. Student[] students = { new Student { Id = 1,Name="Иван", Group="В-11" }, new Student { Id = 2,Name="Александр", Group="В-11" }, new Student { Id = 3,Name="Евгений", Group="В-11" }, new Student { Id = 4,Name="Артем", Group="Б-14" }, new Student { Id = 5,Name="Анатолий", Group="Б-14" }, new Student { Id = 6,Name="Петр", Group="Э-25" }, new Student { Id = 7,Name="Светлана", Group="Э-26" }, new Student { Id = 8,Name="Ольга", Group="М-15" }, new Student { Id = 9,Name="Людмила", Group="М-15" }, new Student { Id = 10,Name="Арсений", Group="М-15" }, }; // 2.1 Сгруппируйте студентов по первой букве имени. Пример: А - Александр, Алексей, Б - Борис, Брюс и пр. Console.WriteLine("Пункт 2.1"); foreach (var item in Method21(students)) { Console.WriteLine(item.Key); foreach (Student student in item) { Console.WriteLine("\t" + student); } } // 2.2 Просортируйте последовательность из п.2.1 в обратном порядке.Пример: сначала идут на Я -Яков, в конце идут - // Алексей, Александр. Console.WriteLine("Пункт 2.2"); foreach (var item in Method22(students)) { Console.WriteLine(item.Key); foreach (Student student in item) { Console.WriteLine("\t" + student); } } //3 Соедините последовательности(join) работников(идентификатор, имя, возраст, оклад, ид отдела) и их // отделов(идентификатор, наименование отдела). Department[] departments = { new Department{Id=1,Name="Бухгалтерия"}, new Department{Id=2,Name="АХО"}, new Department{Id=3,Name="Технический отдел"}, new Department{Id=4,Name="Финансовый отдел"}, }; Worker[] workers = { new Worker{Id=1,Name="Иванов",Age=38, Salary=52000, Department=1}, new Worker{Id=2,Name="Петров",Age=25, Salary=57000, Department=1}, new Worker{Id=3,Name="Сидоров",Age=53, Salary=63000, Department=2}, new Worker{Id=4,Name="Козлова",Age=65, Salary=70000, Department=2}, new Worker{Id=5,Name="Тихомирова",Age=24, Salary=85000, Department=3}, new Worker{Id=6,Name="Соколова",Age=32, Salary=90000, Department=3}, new Worker{Id=7,Name="Белов",Age=41, Salary=81000, Department=3}, new Worker{Id=8,Name="Тараканов",Age=46, Salary=56000, Department=4}, new Worker{Id=9,Name="Глоубев",Age=52, Salary=57000, Department=4}, new Worker{Id=10,Name="Орлов",Age=50, Salary=60000, Department=4}, }; // 3.1 Получите результирующий набор в виде - идентификатор работника, наименование отдела, оклад. Console.WriteLine("Пункт 3.1"); Method31(departments, workers); // 3.2 Получите последовательность в виде: идентификатор отдела, наименование отдела, средний оклад работника. Console.WriteLine("Пункт 3.2"); Method32(departments, workers); //4 Дана коллекция: string[] wordsnew = ["the", "quick", "brown", "fox", "jumps", string.Empty]; // 4.1 Выясните, есть ли значение: "the" в коллекции Console.WriteLine("Пункт 4.1"); Console.WriteLine(Method41(wordsnew)); // 4.2 Создайте массив длин элементов(количество символов в строке) Console.WriteLine("Пункт 4.2"); Console.WriteLine(string.Join(", ", Method42(wordsnew))); //5.Даны 2 набора студентов(идентификатор, имя и номер группы) Student[] students1 = { new Student { Id = 1,Name="Иван", Group="В-11" }, new Student { Id = 2,Name="Александр", Group="В-11" }, new Student { Id = 3,Name="Евгений", Group="В-11" }, new Student { Id = 4,Name="Артем", Group="Б-14" }, new Student { Id = 5,Name="Анатолий", Group="Б-14" }, new Student { Id = 6,Name="Петр", Group="Э-25" }, new Student { Id = 6,Name="Петр", Group="Э-25" }, new Student { Id = 7,Name="Светлана", Group="Э-26" }, new Student { Id = 8,Name="Ольга", Group="М-15" }, new Student { Id = 9,Name="Людмила", Group="М-15" }, new Student { Id = 10,Name="Арсений", Group="М-15" }, }; Student[] students2 = { new Student { Id = 11,Name="Николай", Group="В-41" }, new Student { Id = 12,Name="Леонид", Group="В-41" }, new Student { Id = 3,Name="Евгений", Group="В-11" }, new Student { Id = 13,Name="Василий", Group="Б-24" }, new Student { Id = 5,Name="Анатолий", Group="Б-14" }, new Student { Id = 14,Name="Надежда", Group="Э-25" }, new Student { Id = 14,Name="Надежда", Group="Э-25" }, new Student { Id = 7,Name="Светлана", Group="Э-26" }, new Student { Id = 8,Name="Ольга", Group="М-15" }, new Student { Id = 9,Name="Людмила", Group="М-15" }, new Student { Id = 15,Name="Ирина", Group="М-15" }, }; // 5.1 Выясните, есть ли повторяющиеся значения в разных наборах.Вывести повторяющихся. Console.WriteLine("Пункт 5.1"); Console.WriteLine(string.Join(", ", Method51(students1, students2))); // 5.2 Создайте объединенную коллекцию из массивов студентов без дублирующихся записей. Console.WriteLine("Пункт 5.2"); Console.WriteLine(string.Join("\n", Method52(students1, students2))); // 5.3 Найдите дублирующиеся записи студентов из разных наборов. Console.WriteLine("Пункт 5.3"); Console.WriteLine(string.Join("\n", Method53(students1, students2))); } } }