Примеры Кода для Повседневных Задач
В этой серии представлю вам коллекцию фрагментов кода C#, охватывающих широкий спектр сценариев, с которыми вы можете столкнуться при разработке ПО.
II. Списки. Окончание
Начало
5. Генераторы списков
List comprehension — мощная функция Python, название которой сложно перевести на русский. Назовём это просто генерацией списков. В C# нет прямого эквивалента, но можно добиться аналогичной функциональности, используя LINQ:
List<int> list = [1, -2, 3];
// Преобразование
var squares = list
.Select(i => i*i).ToList();
// Фильтрация
var positive = list
.Where(i => i > 0).ToList();
// Все возможные пары
var list2 = new List<int> { 4, 5, 6 };
var pairs = list
.SelectMany(a => list2, (a, b) => (a, b))
.ToList();
И т.п.
6. Попарная обработка элементов двух списков
Представьте, что у вас есть два списка, и ваша цель — объединить их в один путём, например, попарного суммирования элементов:
List<int> list = [1, 2, 3, 4, 5, 6];
List<int> list2 = [4, 8, 15, 16, 23, 42];
// «В лоб» в цикле
var sum = new List<int>();
for (int i = 0; i < list.Count; i++)
sum.Add(list[i] + list2[i]);
// LINQ метод Zip
sum = list
.Zip(list2, (x, y) => x + y).ToList();
Замечание: в отличие от примера «в лоб», метод Zip корректно обрабатывает ситуации, когда списки разной длины. Длина результирующего списка будет равна длине меньшего из списков.
7. Сортировка
Сортировка строк (или сложных объектов) имеет свои особенности, в которые мы не будем здесь углубляться. Отметим, что у нас есть несколько вариантов:
List<string> list = ["leaf", "cherry", "Fish"];
// «На месте»
list.Sort();
// Без учёта регистра
list.Sort(StringComparer.OrdinalIgnoreCase);
// в новый список
var sorted = list
.OrderBy(x => x, StringComparer.OrdinalIgnoreCase)
.ToList();
Если требуется сортировка объектов по какому-либо свойству, метод Sort также может принимать компаратор или лямбда-выражение для сравнения объектов между собой. См. подробнее в конце этого поста.
Источник: https://medium.com/bytehide/100-csharp-code-snippets-for-everyday-problems-e913c786dec9