Решаем задачу с использованием Linq через лямда-выражение

Приветствую всех, сегодня рассмотрим решение, интересной задачи. Дан массив чисел, который передается в метод в виде IEnumerable, метод должен распарсить текс, разделив строку по пробелу на числа, и передать числа в конструктор другого класса в виде List<Point>

Посмотрим условие задачи:

И дан метод который необходимо сформировать под условие задания:

Мы знаем что для разделения строки по символу можем использовать метод Split, соответственно реализуем запрос Linq

Разберемся что же тут происходит, у нас берется каждый элемент строки который разделяется по пробелу, при чем его не обязательно указывать, так как по умолчанию разделения в Split именно пробел. Но мы могли бы и так написать Split(‘ ‘), что то же не является ошибкой. Далее у нас формируется массив строк содержащие только цифры с арифметическими знаками.

Следующей задачей у нас стоит передать в конструктор эти числа по координатам. Посмотрим на класс Point, в нем конструктор который принимает два числа int int , и передает их полям. Давайте создадим такой запрос который создавал ссылку на класс и передавал туда значения:

Но что мы будем передавать  в конструктор если мы имеем массив строк, а он ожидает числа, Для этого мы воспользуемся методом Parse которые произведет каст «преобразование» из string в int и передасть уже числа. Еще одной из не мало важной проблемы у нас является то, что мы должны передать элементы по индексу. А сделать это можно с помощью метода First() и Last(). Который позволит возвратить первый и последний элемент массива. Последнее предложение будет:

Теперь нам лишь остается, все это поместить в коллекцию, для этого воспользуемся методом ToList(); На этом мы и решили поставленную задачу.

А что делать если бы конструктор класса Point принимал не два числа, а три и более?

Как передать значение массива по индексу c использованием  LINQ и лямбда-выражением?

Если бы такое задание было и наш конструктор принимал 3 числа, на бы пришлось передавать значения по индексу, и методы First Last тут бы нам не помогли, так как они передают только первый и последний элемент массива. В этом случаи нам пришлось бы указать индекс явно. Вот как бы это выглядело:

По аналогии можно было передать по индексу и 4, 5 и более чисел в конструктор Point если бы это требовалось.

Обновлено: 19.01.2018 — 09:13

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.