有什么方法可以使用LINQ清理此类循环?我真的认为这种方法应该与LINQ一起使用。但是我不明白。
我的方法如下:
int[] MakeList(int stepWidth)
{
var ret = new List<int>();
for (var i=0;i<360;i+=stepWidth)
{
ret.Add(i);
}
return ret.ToArray();
}
我唯一能想到的解决方案是:
Enumerable.Range(0, 360).Where(x => x % stepWidth == 0).ToArray();
但是这个Enumerabl.Range(0,360)对我来说似乎太粗糙了:)
答案 0 :(得分:1)
.Select
和.TakeWhile
的组合可能是一种方法,但看起来与其他方法非常接近
var result = Enumerable.Range(0, int.MaxValue)
.Select(i => i * step)
.TakeWhile(i => i < 360)
.ToArray();
答案 1 :(得分:1)
首先:您的代码漂亮且可读。
第二:不要害怕循环-循环完美地显示了程序员的意图。如果必须更改某些内容,则可以消除List<i>
:
int[] MakeList(int stepWidth)
{
var length = (360 + stepWidth - 1) / stepWidth;
var ret = new int[length];
for (var i = 0; i < length; i++)
{
ret[i] = i * stepWidth;
}
return ret;
}
第三:如果经常使用LINQ,我将返回IEnumerable<int>
(请参见生成器):
IEnumerable<int> MakeSequence(int step)
{
for (var i = 0; i < 360; i += step)
yield return i;
}
并按如下所示使用它:MakeSequence(x).ToArray()
或MakeSequence(x).[SomeLinqMethods]
。