Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Dictionary<char, int> ra = w.ToDictionary(ch => ch, ch => (o = ("" + o)[0] == '1' ? o * 2 : o * 5) / 2);
let. Плюс странная констркуция ("" + o)[0] — это первый символ числа? Тогда пишите явно o.ToString()[0]. Но все равно присовение внутри linq функций — это плохо. Тоже самое и здесьnum.Select((c, i) => ++i < num.Length && ra[c] < ra[num[i]] ? -ra[c] : ra[c])
очень плохая практика использовать в методах, которые вызываются в linq сайд эффекты — присваивание переменных и подобноеЭто утверждение верное, но не надо его возводить в ранг мантры. Аналогичный баг находится у студентов с оператором GOTO. Половина знает о его существовании, но все утверждают, что им пользоваться нельзя. И громоздят в коде флаги, дополнительные переменные для выхода из вложенных циклов.
Также нежелательно смешивать linq синтаксис и вызовы extension методовСогласен, что «нежелательно». С другой стороны, декартово произведение проще получить в linq синтаксисе. Аналог оператора let через вызовы extension методов мне неизвестен.
Аналог let — это Select с анонимным типом внутри.Невозможно переписать значение переменной объявленной оператором let и поля анонимного класса тоже ReadOnly. Почему у вас такое отторжение к механизму замыкания переменных?
А вы действительно учите этому студентов?Учу много чему и с очень давних времен. Есть чем гордиться. Сейчас только один предмет веду близкий по содержанию к Data Mining. А LINQ студентам рассказал, чтобы они не городили мне горы циклов. (про уход от темы и ваш вариант ниже).
Также нежелательно смешивать linq синтаксис и вызовы extension методов
(from b in a where .... select ...).ToArray(...).Where(...) ...
a.Where(...).Select(...).ToArray(...).Where(...) ...
Какие мои навыки вы проверяете?Мышление и способность видеть алгоритм за набором символов. Знание базового синтаксиса C#
Вы реально так пишите?Для своего проекта могу написать подобный код. Например, парсер. Без генераторов. Ведь никого не смущает переменные и константы из алгебры a,b,c,d,x. Кроме того, такой код использую только для вещей, где говорящие названия только захламят текст программы, разнесут его на несколько абзацев то, что укладывается в одну строчку. Нет смысла использовать вместо X имя переменной Abscissa, а вместо Y — Ordinate.
var groupToDictionary = function(arr, keyFunction) {
var objToReturn = {};
arr.forEach(function(item) {
var key = keyFunction(item);
if (!objToReturn.hasOwnProperty(key)){
objToReturn[key] = [];
objToReturn[key].getKey = function() { return key; };
}
objToReturn[key].push(item);
});
return objToReturn;
};
LINQ конвертер между римскими и арабскими числами