• C# цикл FOR (вопрос по тестовому заданию)?

    @oleg_ods
    Если предположить что цель метода вернуть List с именами в обратном порядке, то можно развернуть цикл и метод Insert заменить на Add.

    List<string> GetNames() 
    {
       List<string> ss = new List<string>();
       for (int i = 10000000; i >= 0; i--) {
           ss.Add(GetName(i)); // GetName - это просто какая-то функция, которая возвращает нам строку
       }
       return ss;
    }


    List под капотом содержит массив.
    Принцип работы метода Insert:
    1) Проверить достаточно ли места во внутреннем массиве. См. свойство Capacity.
    2) Если недостаточно, то расширить массив в 2 раза.
    3) Сместить все последующие элементы на одну позицию вперед.
    4) Добавить в нужный индекс значение.

    Принцип работы метода Add:
    1) Проверить достаточно ли места во внутреннем массиве. См. свойство Capacity.
    2) Если недостаточно, то расширить массив в 2 раза.
    3) Вставить значение в конец массива.

    Соответственно при использовании метода Insert, в Вашем случае, будет очень много операций копирования значений.

    Второе, если на момент создания List в методе известно кол-во элементов которые он должен содержать, то можно использовать конструктор List(int capacity), который изначально создаст List нужного размера. Так Вы избавитесь от необходимости динамически расширять List при переполнении внутреннего массива.

    P.S. Для общего образования можете погонять альтернативные реализации методов через библиотеку DotNetBenchmark и сравнить на сколько вырастет производительность в каждом случае.
    Ответ написан