Задать вопрос

Как List одномерных массивов записать в двухмерный массив?

Здравствуйте.

Объявлен некоторый List для одномерных строковых массивов:
List<string[]> arrList = new List<string[]>();

Далее создадим произвольное число одномерных строковых массивов разного размера:
string[] arrOfStr1 = new string[10] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" };
string[] arrOfStr2 = new string[8] { "a", "b", "c", "d", "e", "f", "g", "h" };
string[] arrOfStr3 = new string[9] { "a", "b", "c", "d", "e", "f", "g", "h", "i" };

Теперь добавим эти одномерные массивы в ранее объявленный List:
arrList.Add(arrOfStr1);
arrList.Add(arrOfStr2);
arrList.Add(arrOfStr3);

После этого необходимо произвести запись одномерных массивов из List'а в двухмерный массив. Так чтобы каждый одномерный массив (arrOfStr1, arrOfStr2, arrOfStr3) являлся бы столбцом будущего двухмерного массива.
Для начала нужно узнать количество строк и столбцов будущего двухмерного массива.
1) Определим число столбцов будущего двухмерного массива:
arrList.Count;
2) Определим число строк будущего двухмерного массива.
Для этого узнаем размер максимального из одномерных массивов (arrOfStr1, arrOfStr2, arrOfStr3) следующим способом:
int[] biggestNumbers = new int[arrList.Count];

for (int i = 0; i < arrList.Count; i++)
    biggestNumbers[i] = arrList[i].Length;

biggestNumbers.Max();

Объявим двухмерный массив:
string[,] dataArr = new string[biggestNumbers.Max(), arrList.Count];

Далее необходимо записать List одномерных массивов в двухмерный массив, но я не знаю как.
  • Вопрос задан
  • 1624 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@ERAFY Автор вопроса
string[,] dataArr = CreateRectangularArray(arrList);

Сам метод:
static T[,] CreateRectangularArray<T>(IList<T[]> arrays)
    {
           if (arrays.Count == 0)
            {
                Console.WriteLine("Лист одномерных массивов arrays пуст (nullable). Из-за этого метод CreateRectangularArray не будет работать.");
                int minorLength = 5;
                T[,] ret = new T[arrays.Count, minorLength];
                return ret;
            }
            else
            {
                int minorLength = arrays[0].Length;
                T[,] ret = new T[arrays.Count, minorLength];
                for (int i = 0; i < arrays.Count; i++)
                {
                    var array = arrays[i];
                    if (array.Length != minorLength)
                    {
                        throw new ArgumentException("All arrays must be the same length");
                    }
                    for (int j = 0; j < minorLength; j++)
                    {
                        ret[i, j] = array[j];
                    }
                }
                return ret;
            }
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы