Использование лямбда-выражений в array.convertall () - PullRequest
0 голосов
/ 27 мая 2020

Я все еще знакомлюсь с делегатами и лямбдами, я не использую LINQ, и я обнаружил только функцию ConvertAll сегодня, поэтому я экспериментирую и прошу это, чтобы укрепить свое понимание. 1003 * Передо мной стояла задача установить sh, является ли строка чисел четной или нечетной. Итак, сначала преобразуйте список строк в список int, а оттуда в список bool. Каким бы раздутым ни был код, я подумал, смогу ли я разместить все это в одной строке и уменьшить потребность в дополнительной строке l oop.

string numbers = "2 4 7 8 10";

List<bool> evenBools = new List<bool>(Array.ConvertAll(numbers.Split(' '), (x = Convert.Int32) => x % 2 == 0))

Ожидаемый результат [истина, истина, ложь, истина, истина]. Очевидно, что код не работает.

Я понимаю, что второй аргумент Array.ConvertAll) требует разговора. От строки к int - это просто Convert.ToInt32. Можно ли сделать это «на лету» (то есть в левой части лямбда-выражения), чтобы я мог продолжить преобразование типа bool и вернуться вправо?

Ответы [ 2 ]

3 голосов
/ 27 мая 2020

Второй параметр метода ConvertAll - это Converter<TInput,TOutput> делегат. Здесь вы можете использовать анонимный метод, передать ему строку input (левая часть =>), выполнить синтаксический анализ до int внутри и вернуть значение bool, указав, четное оно или нечетное

var boolArray = Array.ConvertAll(numbers.Split(' '), input => Convert.ToInt32(input) % 2 == 0);
List<bool> evenBools = new List<bool>(boolArray);

Наконец, создайте List<bool> из массива.

Левая часть лямбда-выражений содержит только входные параметры (input строка в вашем случае). Правая сторона используется для выражений и операторов, здесь у вас есть лог c для разбора и возврата значения bool.

С помощью System.Linq это может быть записано аналогичным образом

var boolArray = numbers.Split(' ').Select(input => Convert.ToInt32(input) % 2 == 0).ToArray();

Вы также можете использовать int.Parse вместо Convert.ToInt32

0 голосов
/ 27 мая 2020
var boolList = numbers.Split(' ').Select(Int32.Parse).ToList().ConvertAll(i => i % 2 == 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...