Заповнення списку цілих чисел у .NET


75

Мені потрібен список цілих чисел від 1 до х, де х встановлюється користувачем. Я міг би побудувати його за допомогою циклу for, наприклад, припустивши, що x є цілим числом, встановленим раніше:

List<int> iList = new List<int>();
for (int i = 1; i <= x; i++)
{
    iList.Add(i);
}

Це здається німим, безумовно, існує більш елегантний спосіб зробити це, щось на зразок методу діапазону PHP

Відповіді:


94

Якщо ви використовуєте .Net 3.5, Enumerable.Range - це те, що вам потрібно.

Генерує послідовність цілих чисел у межах заданого діапазону.


3
Це поверне IEnumerable <int>, а не List <int>, тому, як зазначив aku, ви захочете викликати .ToList () під час виклику Enumerable.Range (x, y).
Деніел Дженнінгс,

1
як правило, краще використовувати IEnumerable <>, де це можливо, для повної гнучкості. особливо якщо цей список не змінює, швидше за все, не повинен бути загальним списком <T>
Simon_Weaver

Чому метод діапазону є більш елегантним, ніж просто виконання простого циклу for, умовний - max?
Якуб Келлер

1
IMHO цілком очевидно, що var List = new List <int> (Max - Min); для (var Index = Min; Index <Max; ++ Index) List.Add (Index); не елегантний як Enumerable.Range (Min, Max);
Массіміліано Карозі


18

Я один із багатьох, хто писав блоги про метод розширення ruby-esque To, який ви можете написати, якщо використовуєте C # 3.0:


public static class IntegerExtensions
{
    public static IEnumerable<int> To(this int first, int last)
    {
        for (int i = first; i <= last; i++)
{ yield return i; } } }

Тоді ви можете створити свій список цілих чисел, як це

List<int> = first.To(last).ToList();

або

List<int> = 1.To(x).ToList();


1
Інші відповіді, швидше за все, те, що шукав запитувач, але я проголосував тут, тому що мені подобається отриманий синтаксис. Наскільки читабельнішим ви можете отримати, ніж "1.To (10)"?
Джей Базузі,

0

Ось короткий метод, який повертає список цілих чисел.

    public static List<int> MakeSequence(int startingValue, int sequenceLength)
    {
        return Enumerable.Range(startingValue, sequenceLength).ToList<int>();
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.