Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 1179. #ЗаметкиНаПолях Выделяем Подмассивы. Начало Сегодня рассмотрим, различные способы выделения подмассива в C#. Подмассив обычно определяется начальным индексом и количеством элементов, включаемых в него. В общем случае существует два логических способа это сделать: - Создать новый массив и добавить к нему необходимые элементы. - Создать оболочку вокруг массива, которая может содержать указатели на определенные элементы внутри массива без создания нового. Допустим, у нас есть массив строк:
var posts = new string[] { "post1", "post2", "post3", "post4", "post5", "post6", "post7", "post8", "post9", "post10" };

1. Использование LINQ В LINQ есть методы Skip() и Take():
var sliced = posts.Skip(0).Take(5);
// Элементы с post1 до post5

Мы передаем количество элементов, которые хотим пропустить, методу Skip() - начальный индекс, и количество элементов, которые хотим включить, в метод Take(). Операция возвращает новый IEnumerable, который мы можем перечислить. 2. Использование метода Copy() Тот же сценарий, но помощью метода массива Copy():
var sliced = new string[5];
Array.Copy(posts, 0, sliced, 0, 5);

Здесь мы инициализируем целевой массив, затем мы вызываем метод Copy(), который принимает исходный массив, начальный индекс, целевой массив, начальный целевой индекс (ноль, потому что мы копируем в новый массив) и количество элементов, которые мы хотим скопировать. Метод возвращает новый массив, содержащий скопированные элементы. 3. Оператор диапазона (x..y) в C# 8.0+ Начиная с C#8 появился новый оператор диапазона, который сделал выделение подмассива синтаксически очень простым. Он позволяет выделить элементы между индексом «x» и индексом «y», не включая элемент с индексом «y»:
var s1 = posts[2..]; // co 2го до конца
var s2 = posts[..2]; // с начала до 1го
var s3 = posts[1..3]; // с 1го до 2го
var s4 = posts[..]; // весь массив
var s5 = posts[3..^0]; // с 3го до предпоследнего

Оператор диапазона также выделяет новый массив. Окончание следует… Источник: https://code-maze.com/csharp-array-slicing/