Is er een equivalent van Pythons range(12) in C#?

Dit duikt zo nu en dan voor mij op: ik heb wat C#-code die de functie range()in Python heel graag wil hebben.

Ik ben me bewust van het gebruik

for (int i = 0; i < 12; i++)
{
   // add code here
}

Maar dit remt in functioneel gebruik, zoals wanneer ik een Linq Sum()wil doen in plaats van de bovenstaande lus te schrijven.

Is er iets ingebouwd? Ik denk dat ik altijd mijn eigen kan gooien met een yieldof iets dergelijks, maar dit zou zohandig zijn om gewoon hebben.


Antwoord 1, autoriteit 100%

U zoekt de Enumerable.Rangemethode:

var mySequence = Enumerable.Range(0, 12);

Antwoord 2, autoriteit 17%

Om de antwoorden van iedereen aan te vullen, dacht ik dat ik moet toevoegen dat Enumerable.Range(0, 12);dichter bij Python 2.x’s xrange(12)ligt omdat het is een opsombaar.

Als iemand specifiek een lijst of een array nodig heeft:

Enumerable.Range(0, 12).ToList();

of

Enumerable.Range(0, 12).ToArray();

zijn dichter bij het range(12)van Python.


Antwoord 3, autoriteit 8%

Enumerable.Range(start, numElements);

Antwoord 4, autoriteit 5%

Opsombaar.Bereik(0,12);


Antwoord 5, autoriteit 4%

namespace CustomExtensions
{
    public static class Py
    {
        // make a range over [start..end) , where end is NOT included (exclusive)
        public static IEnumerable<int> RangeExcl(int start, int end)
        {
            if (end <= start) return Enumerable.Empty<int>();
            // else
            return Enumerable.Range(start, end - start);
        }
        // make a range over [start..end] , where end IS included (inclusive)
        public static IEnumerable<int> RangeIncl(int start, int end)
        {
            return RangeExcl(start, end + 1);
        }
    } // end class Py
}

Gebruik:

using CustomExtensions;
Py.RangeExcl(12, 18);    // [12, 13, 14, 15, 16, 17]
Py.RangeIncl(12, 18);    // [12, 13, 14, 15, 16, 17, 18]

Other episodes