C# лямбда-выражение при работе со строкой
Есть стандартый вариант функции, для поиска ошибки в коде Хэминга
static int FindMistake(string str)
{
var mistake = 0;
foreach (var i in str)
{
if (i == '1') mistake ^= i + 1;
}
return mistake;
}
Как переписать это, используя лямбда-выражения? Поиск в интернете приводит к решениям, которые используют List, но не string
Ответы (1 шт):
Строка итерируется точно так же как массив символов char[], вы же сами по ней foreach запускаете. Никакой разницы в этом случае между строкой, массивом или списком нет.
Странный код, почему i + 1? ведь если брать '1' то получится код символа + 1, то есть mistake ^= 50 так как код символа 1 равен 49. Ну либо в показанном коде ошибка.
Ну ок, не влезая в подробности, то если количество вхождений четное, то функция вернет 0, если нечетное, то 50, окей.
static int FindMistake(string str) => (str.Count(x => x == '1') % 2) * 50;
Только вы не лямбда-выражение хотели, а Linq, я полагаю. Но можно не int а bool возвращать, типа есть/нет.
static bool FindMistake(string str) => str.Count(x => x == '1') % 2 != 0;