Метод Array.ConvertAll () и ToArray (), что лучше? - PullRequest
0 голосов
/ 19 июня 2020

Какой из следующих методов лучше читать с консоли и сохранять в массиве Int? Есть ли разница между двумя?

int[][] s = new int[3][];
            for(int i=0; i<elements.Length;i++)
            {
                s[i] = Console.ReadLine().Split(' ').Select(x => int.Parse(x)).ToArray();
            }

ИЛИ

int[][] s = new int[3][];

        for (int i = 0; i < 3; i++) {
            s[i] = Array.ConvertAll(Console.ReadLine().Split(' '), sTemp => Convert.ToInt32(sTemp));
        }

Заранее спасибо !!!

1 Ответ

1 голос
/ 19 июня 2020

Во-первых, они не эквивалентны, в одной версии вы используете int.Parse(x), в другой Convert.ToInt32(sTemp)

Кроме того, вы нашли отличный пример того, как сделать что-то более чем одним способом .. В программировании вы найдете это много.

ConvertAll()

Преобразует массив одного типа в массив другого типа.

Select()

Проецирует каждый элемент последовательности в новую форму.

ToArray()

Создает массив из IEnumerable.

Технически, в комбинации они производят одно и то же, но по-разному справляются с этим из-за того, что они являются частью немного разных областей BCL , которые имеют проблемы в немного разных областях.

Лично я не вижу, чтобы ConvertAll использовал так много в наши дни, поскольку люди очень хорошо знакомы с LINQ и любят объединять методы.

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

Короче, используйте то, что Вам нравится

...