50

这对我来说时不时出现:我有一些 C# 代码非常想要range()Python 中可用的函数。

我知道使用

for (int i = 0; i < 12; i++)
{
   // add code here
}

但这在功能用法上有所阻碍,就像我想做一个 LinqSum()而不是写上面的循环一样。

有内置的吗?我想我总是可以自己滚动一个yield或这样的,但这方便。

4

5 回答 5

93

您正在寻找Enumerable.Range方法:

var mySequence = Enumerable.Range(0, 12);
于 2009-08-13T11:24:19.693 回答
16

只是为了补充每个人的答案,我想我应该添加它Enumerable.Range(0, 12);更接近 Python 2.x xrange(12),因为它是一个可枚举的。

如果有人特别需要列表或数组:

Enumerable.Range(0, 12).ToList();

或者

Enumerable.Range(0, 12).ToArray();

更接近 Python 的range(12).

于 2014-04-14T14:22:09.377 回答
7
Enumerable.Range(start, numElements);
于 2009-08-13T11:24:48.583 回答
5

Enumerable.Range(0,12);

于 2009-08-13T11:25:53.217 回答
4
namespace CustomExtensions
{
    public static class Py
    {
        // make a range over [start..end) , where end is NOT included (exclusive)
        public static IEnumerable<int> RangeExcl(int start, int end)
        {
            if (end <= start) return Enumerable.Empty<int>();
            // else
            return Enumerable.Range(start, end - start);
        }

        // make a range over [start..end] , where end IS included (inclusive)
        public static IEnumerable<int> RangeIncl(int start, int end)
        {
            return RangeExcl(start, end + 1);
        }
    } // end class Py
}

用法:

using CustomExtensions;

Py.RangeExcl(12, 18);    // [12, 13, 14, 15, 16, 17]

Py.RangeIncl(12, 18);    // [12, 13, 14, 15, 16, 17, 18]
于 2018-04-03T10:45:10.770 回答