可以计算负范围

时间:2016-03-29 14:48:34

标签: c# python range

在python中,我们有一个范围可以为具有负整数的数组生成。

例如:

In[4]: range(-2, 2+1)
Out[4]: [-2, -1, 0, 1, 2]

C#中是否存在等效系统;我知道IEnumerable方法,但在尝试它时,我得到以下输出:

//Rextester.Program.Main is the entry point for your code. Don't change it.
//Compiler version 4.0.30319.17929 for Microsoft (R) .NET Framework 4.5

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //Your code goes here
            Console.WriteLine("Hello, world!");
            int half_window = 2;
            var mySeq1 = Enumerable.Range(-2, 2+1).ToArray();
            foreach(var item in mySeq1)
    Console.Write(item.ToString() + " ");
        } 
    }
}

产生输出:

Hello, world!
-2 -1 0

是否已经有一个内置的方法可以用来获取python的输出?

4 个答案:

答案 0 :(得分:6)

Enumerable.Range的第二个参数指定要生成的元素的计数,而不是停止值。

Console.WriteLine("Hello, world!");
int half_window = 2;
var mySeq1 = Enumerable.Range(-2, 5).ToArray();
//                                ^
foreach(var item in mySeq1)
    Console.Write(item.ToString() + " ");

输出:

Hello, world!
-2 -1 0 1 2 

答案 1 :(得分:0)

Enumerable.Range就像这样

Enumerable.Range(STARTVALUE,要计算多少)

实施例 Enumerable.Range(6, 10)会产生

arr[6,7,8,9,10,11,12,13,14,15,16]

即从

开始的10个元素

如果你想要计算一个上升点,你必须编写自己的功能。类似的东西

MakeRange(int st, int end)
{
    var range = st < 0 ? Math.Abs(st) + end + 1 : end-st;

    return Enumerable.Range(st, range);
} 

希望这有助于你

答案 2 :(得分:0)

C#&#39; s Enumerable.Range取一个起始值和 count - 要返回的元素数,而不是像python中的结束值。要获得与python等效的返回值,您需要将其命名为:

Enumerable.Range(start, end-start);

所以在你的情况下,电话会是

Enumerable.Range(-2, (2+1) - (-2));

与说

相同
Enumerable.Range(-2, 5);

唯一需要注意的是,您需要注意end-start不是否定的,否则Enumerable.Range会抛出ArgumentOutOfRangeException

答案 3 :(得分:0)

正如cubrr所说的那样,第二个参数的工作方式略有不同 - 如果你想编写自己的方法,其工作方式与Python等效方法完全相同,你可以使用:

public static class MyEnumerable
{
    public static IEnumerable<int> Range(int start, int stop)
    {
        for (int i = start; i < stop; i++)
            yield return i;
    }
}

用作:

var result = MyEnumerable.Range(-2, 3); // -2, -1, 0, 1, 2