F#有sequences,可以创建序列:
seq { 0 .. 10 }
创建从0到10的数字序列。
C#中是否有类似的功能?
Enumerable.Range(0, 11);
在指定的范围内生成一系列整数。
http://msdn.microsoft.com/zh-cn/library/system.linq.enumerable.range.aspx
你可以创建一个简单的函数。这个函数可以适用于更复杂的序列,否则可以使用Enumerable.Range
。
IEnumerable<int> Sequence(int n1, int n2)
{
while (n1 <= n2)
{
yield return n1++;
}
}
OddSequence
EvenSequence
或其他自定义范围。例如,if (++n1 % 2 == 0) yield return n1
。已经过了几天;) - Josiah RuddellEnumerable.Range(0, 12).Select( i => "Minute:" + i*5 )
更易读。 - Matt Baranvar seq = 0..2;
var array = new string[]
{
"First",
"Second",
"Third",
};
foreach(var s in array[seq])
{
System.Console.WriteLine(s);
}
// Output: First, Second
IEnumerable<int>
,则可以使用扩展方法:
public static IEnumerable<int> ToEnumerable(this Range range)
{
for (var i = range.Start.Value; i < range.End.Value; i++)
{
yield return i;
}
}
...
var seq = 0..2;
foreach (var s in seq.ToEnumerable())
{
System.Console.WriteLine(s);
}
// Output: 0, 1
我的实现:
private static IEnumerable<int> Sequence(int start, int end)
{
switch (Math.Sign(end - start))
{
case -1:
while (start >= end)
{
yield return start--;
}
break;
case 1:
while (start <= end)
{
yield return start++;
}
break;
default:
yield break;
}
}
最初在这里回答。
IEnumerable<int>
),可以尝试以下代码:
Enumerable.Range(0, ++10);
解释一下,如果你想要得到一个从 0 到 10 的数字序列,你需要让这个序列以 0 开始(记住,在 0 和 10 之间有 11 个数字,包括 0 和 10)。
IEnumerable<int> Series(int k = 0, int n = 1, int c = 1)
{
while (true)
{
yield return k;
k = (c * k) + n;
}
}
你可以像这样使用
var ZeroTo10 = Series().Take(11);
using System.Threading;
private static int orderNumber = 0;
int Seq()
{
return Interlocked.Increment(ref orderNumber);
}
Seq()
时,它将返回下一个订单号并递增计数器。如果您希望将生成的序列保存在变量中:
using System.Collections.Generic;
using System.Linq;
IEnumerable<int> numbersToPrint = Enumerable.Range(1, 11);
这在上面展示的其他解决方案中是隐含的,但我还明确包含了所需的命名空间,以使其按预期工作。
我在我的代码中有这些函数
private static IEnumerable<int> FromZero(this int count)
{
if (count <= 0)
yield break;
for (var i = 0; i < count; i++)
{
yield return i;
}
}
private static IEnumerable<int> FromOne(this int count)
{
if (count <= 0)
yield break;
for (var i = 1; i <= count; i++)
{
yield return i;
}
}
这有助于减少一些 for(i) 代码。
IEnumerable<int>
,请包括调用.ToArray()
。 - Anthony Pegram