如何在C#中创建具有整数序列的数组?

Bud*_*dda 106 .net c# f# sequence

F#有序列,它允许创建序列:

seq { 0 .. 10 }
Run Code Online (Sandbox Code Playgroud)

创建0到10之间的数字序列.

C#中有类似的东西吗?

ale*_*exn 192

你可以用Enumerable.Range(0, 10);.例:

var seq = Enumerable.Range(0, 10);
Run Code Online (Sandbox Code Playgroud)

MSDN页面在这里.

  • 注意:这将创建一个从0开始的序列,包含10个项目(以9结尾).如果你想要0*到*10,那么第二个参数将是11.如果你需要一个实际的数组而不是`IEnumerable <int>`,请包含一个调用`.ToArray()`. (62认同)

Jos*_*ell 18

你可以创建一个简单的功能.这将适用于更复杂的序列.否则Enumerable.Range应该这样做.

IEnumerable<int> Sequence(int n1, int n2)
{
    while (n1 <= n2)
    {
        yield return  n1++;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 哇,这让我明白了`yield`是如何运作的:D (8认同)

b_l*_*itt 5

Linq投影,索引索引过载(i)很少使用:

(new int[11]).Select((o,i) => i)
Run Code Online (Sandbox Code Playgroud)

我更喜欢这种方法的灵活性。

例如,如果我想要偶数:

(new int[11]).Select((item,i) => i*2)
Run Code Online (Sandbox Code Playgroud)

或者,如果我想每5分钟增加一个小时:

(new int[12]).Select((item,i) => i*5)
Run Code Online (Sandbox Code Playgroud)

或字符串:

(new int[12]).Select((item,i) => "Minute:" + i*5)
Run Code Online (Sandbox Code Playgroud)

  • 我觉得 `Enumerable.Range(0, 12).Select( i =&gt; "Minute:" + i*5 )` 更具可读性。 (2认同)