Câu trả lời:
Enumerable.Range(0, 11);
Tạo một chuỗi các số tích phân trong một phạm vi xác định.
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx
Bạn có thể tạo một hàm đơn giản. Điều này sẽ làm việc cho một trình tự phức tạp hơn. Nếu không thì điều Enumerable.Range
nên làm.
IEnumerable<int> Sequence(int n1, int n2)
{
while (n1 <= n2)
{
yield return n1++;
}
}
OddSequence
EvenSequence
hoặc các phạm vi tùy chỉnh khác. if (++n1 % 2 == 0) yield return n1
, ví dụ. Đã được vài ngày;)
Phép chiếu Linq với quá tải trình lập chỉ mục hiếm khi được sử dụng (i) :
(new int[11]).Select((o,i) => i)
Tôi thích phương pháp này vì tính linh hoạt của nó.
Ví dụ: nếu tôi muốn evens:
(new int[11]).Select((item,i) => i*2)
Hoặc nếu tôi muốn gia số 5 phút của một giờ:
(new int[12]).Select((item,i) => i*5)
Hoặc chuỗi:
(new int[12]).Select((item,i) => "Minute:" + i*5)
Trong C # 8.0, bạn có thể sử dụng Chỉ số và phạm vi
Ví dụ:
var seq = 0..2;
var array = new string[]
{
"First",
"Second",
"Third",
};
foreach(var s in array[seq])
{
System.Console.WriteLine(s);
}
// Output: First, Second
Hoặc nếu bạn muốn tạo IEnumerable<int>
thì bạn có thể sử dụng tiện ích mở rộng:
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
PS Nhưng hãy cẩn thận với 'chỉ mục từ cuối' . Ví dụ, phương thức mở rộng ToEnumerable không hoạt động với var seq = ^2..^0
.
Ban đầu được trả lời ở đây .
Nếu bạn muốn liệt kê một chuỗi số ( IEnumerable<int>
) từ 0
một biến end
, hãy thử
Enumerable.Range(0, ++10);
Theo giải thích, để có một dãy số từ 0 đến 10, bạn muốn dãy số bắt đầu từ 0 (nhớ rằng có 11 số từ 0 đến 10, bao gồm cả).
Nếu bạn muốn một chuỗi tuyến tính không giới hạn, bạn có thể viết một hàm như
IEnumerable<int> Series(int k = 0, int n = 1, int c = 1)
{
while (true)
{
yield return k;
k = (c * k) + n;
}
}
mà bạn có thể sử dụng như thế nào
var ZeroTo1000 = Series().Take(11);
Nếu bạn muốn một hàm mà bạn có thể gọi nhiều lần để tạo ra các số tăng dần, có lẽ bạn muốn những thứ như vậy.
using System.Threading;
private static int orderNumber = 0;
int Seq()
{
return Interlocked.Increment(ref orderNumber);
}
Khi bạn gọi Seq()
nó sẽ trả về số thứ tự tiếp theo và tăng bộ đếm.
Tôi có các chức năng này trong mã của mình
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;
}
}
Điều này giúp giảm một số cho (i) mã.
IEnumerable<int>
, hãy bao gồm một cuộc gọi.ToArray()
.