0

Есть ли эквивалент функции range(12) из Python в C#?

19

Проблема возникает время от времени: у меня есть код на C#, которому очень не хватает функции range(), доступной в Python.

Я знаю, что можно использовать следующий цикл:

for (int i = 0; i < 12; i++)
{
   // добавьте код здесь
}

Однако это не подходит для функционального использования, например, когда я хочу сделать Linq Sum(), вместо того чтобы писать вышеупомянутый цикл.

Существует ли встроенное решение для этой задачи? Я понимаю, что всегда могу реализовать свою собственную версию с помощью yield или что-то подобное, но было бы очень удобно просто иметь эту функциональность.

4 ответ(ов)

0

Чтобы дополнить ответы других, я хотел бы отметить, что Enumerable.Range(0, 12); ближе к xrange(12) из Python 2.x, так как это возвращает перечисляемый объект.

Если кому-то требуется именно список или массив, то можно использовать:

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

или

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

Эти варианты ближе к Python range(12).

0

Вы можете использовать метод Enumerable.Range для генерации последовательности целых чисел, начиная с заданного значения (start), и возвращая указанное количество элементов (numElements). Вот пример использования данного метода в C#:

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        int start = 5;      // Начальное значение
        int numElements = 10; // Количество элементов

        IEnumerable<int> numbers = Enumerable.Range(start, numElements);

        foreach (var number in numbers)
        {
            Console.WriteLine(number);
        }
    }
}

Этот код создаст последовательность чисел от 5 до 14 (включительно). Метод Enumerable.Range удобен для генерации последовательностей, что может быть полезно в различных сценариях, таких как тестирование или заполнение коллекций значениями.

0

Вы можете создать собственные расширения для генерации диапазонов чисел с учетом включительности или исключительности пределов, используя следующий код:

namespace CustomExtensions
{
    public static class Py
    {
        // Создает диапазон [start..end), где end НЕ включен (эксклюзивный)
        public static IEnumerable<int> RangeExcl(int start, int end)
        {
            if (end <= start) return Enumerable.Empty<int>();
            // иначе
            return Enumerable.Range(start, end - start);
        }

        // Создает диапазон [start..end], где end ВКЛЮЧЕН (инклюзивный)
        public static IEnumerable<int> RangeIncl(int start, int end)
        {
            return RangeExcl(start, end + 1);
        }
    } // конец класса Py
}

Пример использования:

using CustomExtensions;

var exclusiveRange = Py.RangeExcl(12, 18); // [12, 13, 14, 15, 16, 17]
var inclusiveRange = Py.RangeIncl(12, 18);  // [12, 13, 14, 15, 16, 17, 18]

Таким образом, RangeExcl создает диапазон с исключительным верхним пределом, а RangeIncl – с включительным. Эти методы позволяют удобно управлять диапазонами чисел в вашем коде.

0

Enumerable.Range(0, 12) в C# создает последовательность целых чисел, начиная с 0 и заканчивая 11 (всего 12 элементов). Это метод, который возвращает IEnumerable, содержащий последовательно увеличивающиеся целые числа от начального значения (в данном случае 0) до указанного количества (12).

Можно использовать его так:

var numbers = Enumerable.Range(0, 12);
foreach (var number in numbers)
{
    Console.WriteLine(number);
}

Вывод будет:

0
1
2
3
4
5
6
7
8
9
10
11

Если у вас есть дополнительные вопросы по использованию Enumerable.Range, не стесняйтесь задавать!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь