Как создать массив с последовательностью чисел в C#?
в F# есть последовательности что позволяет создавать последовательности:
seq { 0 .. 10 }
создать последовательность чисел от 0 до 10.
есть ли что-то подобное в C#?
6 ответов:
можно использовать
Enumerable.Range(0, 10);
. Пример:var seq = Enumerable.Range(0, 10);
страница MSDN здесь.
Enumerable.Range(0, 11);
генерирует последовательность целых чисел в заданном диапазоне.
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx
Вы можете создать простую функцию. Это будет работать для более сложных последовательностей. В противном случае
Enumerable.Range
должны сделать.IEnumerable<int> Sequence(int n1, int n2) { while (n1 <= n2) { yield return n1++; } }
моя реализация:
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>
) от0
переменнойend
, затем попробоватьEnumerable.Range(0, ++end);
в объяснении, чтобы получить последовательность чисел от 0 до 1000, вы хотите, чтобы последовательность начиналась с 0 (помня, что есть 1001 число между 0 и 1000 включительно).
если вы хотите неограниченный линейный ряд, вы можете написать функцию, как
IEnumerable<int> Series(int k = 0, int n = 1, int c = 1) { while (true) { yield return k; k = (c * k) + n; } }
что вы могли бы использовать как
var ZeroTo1000 = Series().Take(1001);
если вы хотите функцию, которую вы можете вызвать несколько раз, чтобы генерировать увеличивающиеся числа, возможно, вы хотите что-то вроде.
using System.Threading; private static int orderNumber = 0; int Seq() { return Interlocked.Increment(ref orderNumber); }
когда вы называете
Seq()
он вернет следующий номер заказа и увеличит счетчик.
проекция Linq с редко используемым перегрузка индексатора (i):
(new int[11]).Select((o,i) => i)
Я предпочитаю этот метод для ее гибкость.
например, если я хочу evens:
(new int[11]).Select((item,i) => i*2)
или если я хочу 5 минут в час:
(new int[12]).Select((item,i) => i*5)
или строки:
(new int[12]).Select((item,i) => "Minute:" + i*5)