Вы проходите только часть list
, как указано в условии for
:
for(int k = 0; k<=count; k++)
^--here--^
Это потому, что count
имеет меньшее значение, чем длина исходного массива. Измените это условие, чтобы пройти весь массив:
for(int k = 0; k<list.length; k++)
Я сомневаюсь, что существует что-либо для положения во главе трассировщика лучей. Я довольно люблю свое выражение Mandelbrot хотя:
from row in Enumerable.Range(0, ImageHeight)
from col in Enumerable.Range(0, ImageWidth)
// Work out the initial complex value from the row and column
let c = new Complex((col * SampleWidth) / ImageWidth + OffsetX,
(row * SampleHeight) / ImageHeight + OffsetY)
// Work out the number of iterations
select Generate(c, x => x * x + c).TakeWhile(x => x.SquareLength < 4)
.Take(MaxIterations)
.Count() into count
// Map that to an appropriate byte value
select (byte)(count == MaxIterations ? 0 : (count % 255) + 1);
Mads Torgersen демонстрирует, как записать автономное рекурсивное лямбда-выражение в LINQ для вычисления (например). факториал:
i => new Func<Func<int,int>,Func<int,int>>(fac => x => x == 0 ? 1 : x * fac(x
- 1))(new SelfApplicable<Func<Func<Func<int,int>,Func<int,int>>,Func<int,int>
>>(y => f => x => f(y(y)(f))(x))(y => f => x => f(y(y)(f))(x))(fac => x => x
== 0 ? 1 : x * fac(x - 1)))(i)
Mads отмечает:
Я не могу даже выяснить, как к разрыву строки это так, чтобы это приблизилось читаемый, таким образом, я не имею.
Назовите меня сумасшедшим, но я - большой поклонник удобочитаемости - таким образом, я склонен просто иметь последовательность individually-innocent-looking выражений, которые я затем комбинирую. Конечно, это зависит, как Вы определяете LINQ: если Вы имеете в виду синтаксис запроса в C#, то я не склонен идти за борт..., но если Вы имеете в виду метапрограммирование (т.е. код C#, который создает выражение LINQ), у меня есть несколько хороших примеров: