Мой друг-разработчик говорит мне, что циклы намного быстрее, используя делегатов, и я хотел бы сравнить их, но у меня возникают проблемы с подключением точек к тому, как это работает.Как использовать делегат в этом сценарии?
Рассмотрите следующий калькулятор баланса. Это в основном принимает список счетов и добавляет начальное значение (начальное сальдо), если она существует в общей стоимость кредитов, если она существует, и вычитает общую стоимость Дебетов для каждой учетной записи:
private static IDictionary<string, decimal> CalculateBalances(
IDictionary<string, decimal> initialValue,
IDictionary<string, decimal> credits,
IDictionary<string, decimal> debits)
{
var r = new Dictionary<string, decimal>();
foreach (var key in initialValue.Select(k => k.Key)
.Concat(credits.Select(k => k.Key))
.Concat(debits.Select(k => k.Key))
.Distinct())
{
r.Add(key,
(initialValue.ContainsKey(key) ? initialValue[key] : 0M)
+ (credits.ContainsKey(key) ? credits[key] : 0M)
- (debits.ContainsKey(key) ? debits[key] : 0M)
);
}
return r;
}
Это довольно производительной в списках малых и средних учетных записей, но будет ли использование делегатов быстрее? И, честно говоря, делегатская логика, похоже, работает под прямым углом к моим мысленным процессам, потому что я почесываю голову, как даже написать это.
Может ли кто-нибудь предложить способ переписать это с помощью делегатов?
Делегаты должны быть быстрее, чем, точно? Вы уже используете делегатов для своих лямбдов (даже если вы их явно не создали, они там). Какая часть вашей петли, если бы ваш друг заменил вас делегатами, точно? – Sven
То, как она говорила об этом, в основном заменяя все вещи на внутренней части цикла некоторым вызовом делегата. Мне удалось поднять скептическую бровь, как будто я знал, о чем она говорит. –
«Делегатная логика, кажется, работает под прямым углом к моим мысленным процессам», создайте игрушечный проект на функциональном языке программирования (скажем, F #), и что «вектор мысли» обязательно повернется в правильном направлении! – dasblinkenlight