Jak stworzyć tablicę z sekwencją liczb całkowitych w C#?
F # posiada sekwencje które pozwalają na tworzenie sekwencji:
seq { 0 .. 10 }
Tworzenie sekwencji liczb od 0 do 10.
Czy jest coś podobnego w C#?
6 answers
Możesz użyć Enumerable.Range(0, 10);
. Przykład:
var seq = Enumerable.Range(0, 10);
Strona MSDN tutaj .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-03 22:06:46
Enumerable.Range(0, 11);
Generuje ciąg liczb całkowitych w określonym zakresie.
Http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-04 17:25:14
Można utworzyć prostą funkcję. To zadziała dla bardziej skomplikowanej sekwencji. W przeciwnym razie {[1] } powinien to zrobić.
IEnumerable<int> Sequence(int n1, int n2)
{
while (n1 <= n2)
{
yield return n1++;
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-03 22:16:08
Moja realizacja:
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;
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-07 20:25:41
Jeśli chcesz wyliczyć ciąg liczb (IEnumerable<int>
) z 0
do zmiennej end
, spróbuj
Enumerable.Range(0, ++end);
W wyjaśnieniu, aby uzyskać ciąg liczb od 0 do 1000, chcesz, aby ciąg zaczynał się od 0 (pamiętając, że istnieje 1001 liczb od 0 do 1000, włącznie).
Jeśli chcesz mieć nieograniczony szereg liniowy, możesz napisać funkcję jak
IEnumerable<int> Series(int k = 0, int n = 1, int c = 1)
{
while (true)
{
yield return k;
k = (c * k) + n;
}
}
Które można użyć jak
var ZeroTo1000 = Series().Take(1001);
Jeśli chcesz mieć funkcję, możesz wielokrotnie wywoływać generowanie liczb przyrostowych, być może chcesz coś jak.
using System.Threading;
private static int orderNumber = 0;
int Seq()
{
return Interlocked.Increment(ref orderNumber);
}
Po wywołaniu Seq()
zwróci następny numer zamówienia i zwiększy licznik.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-10 14:32:51
Projekcja Linq z rzadko używanym przeciążeniem indeksera (i):
(new int[11]).Select((o,i) => i)
Wolę tę metodę ze względu na jej elastyczność.
Na przykład, jeśli chcę wyrównać:
(new int[11]).Select((item,i) => i*2)
Lub jeśli chcę 5 minutowych przyrostów o godzinę:
(new int[12]).Select((item,i) => i*5)
Lub struny:
(new int[12]).Select((item,i) => "Minute:" + i*5)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-03 13:47:51