在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的输出?
答案 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