【问题标题】:Is there an equivalent of Pythons range(12) in C#?C# 中是否有相当于 Pythons range(12) 的?
【发布时间】:2010-11-19 06:33:56
【问题描述】:

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

我知道使用

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

但这在功能使用方面会有所下降,例如当我想做一个 Linq Sum() 而不是编写上述循环时。

有内置的吗?我想我总是可以自己使用yield 或类似的,但这对于拥有来说会很方便

【问题讨论】:

  • 不是 Enumeration.Range,而是 Enumerable.Range。

标签: c# python range xrange


【解决方案1】:

您正在寻找Enumerable.Range 方法:

var mySequence = Enumerable.Range(0, 12);

【讨论】:

  • 注意:这需要 System.Linq 和 C# 3.0。
  • crb:C#3 不是必需的。您可以使用 C# 2 中的此类,但需要引用 .NET 3.5 框架中的 System.Core。
  • 这很令人困惑,因为我相信 Python 的版本是 (start, end),而 .NET 的版本是 (start, count) - 不要把它们搞混了!
【解决方案2】:
Enumerable.Range(start, numElements);

【讨论】:

    【解决方案3】:

    Enumerable.Range(0,12);

    【讨论】:

      【解决方案4】:

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

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

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

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

      更接近 Python 的 range(12)

      【讨论】:

        【解决方案5】:
        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]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-12
          • 1970-01-01
          • 1970-01-01
          • 2021-10-09
          • 1970-01-01
          • 1970-01-01
          • 2013-12-21
          • 1970-01-01
          相关资源
          最近更新 更多