У меня есть этот следующий IEnumerable LINQ запрос:сломать IEnumerable <int> запроса, который использует Enumerable.Range
var query = from p in Enumerable.Range(2, 1000000)
let sumofPowers = from ch in p.ToString()
let sumOfPowers = Math.Pow(Convert.ToDouble(ch.ToString()), 5)
select sumOfPowers
where p == sumofPowers.Sum()
select p;
Он находит сумму всех чисел, которые могут быть записаны в виде суммы пятых степеней их цифр. Это проект Euler Problem 30
Он отлично работает, как есть. Я знаю, что это nitpick, но диапазон меня раздражает. Я в основном догадался, что нашел правильный результат на уровне 1 000 000, поэтому я позволил ему остановиться. В этом сценарии этого числа было достаточно.
Но это просто жесткое «случайное» число. Если вы посмотрите на код, вы обнаружите, что, как только p == sumofPowers.Sum()
будет правдой, вам не нужно больше запускать цикл.
Я знаю yield
может делать это в других ситуациях, а break
работает в обычных циклах - так что вы можете сделать в этой ситуации?
Я не уверен, что вы подразумеваете под последней частью. Math.pow (Convert.ToDouble (ch.ToString()), 5) не будет работать, как Math.pow ((двойной) ч, 5) – CasperT
Try: от ч в р пусть sumOfPowers = Math.pow (Convert.ToDouble (ch), 5) –