Подтвердить что ты не робот

С# присваивать 1 мерный массив синтаксису 2-мерного массива

Я хочу сделать что-то вроде:

object[] rowOfObjects = GetRow();//filled somewhere else
object[,] tableOfObjects = new object[10,10];

tableOfObjects[0] = rowOfObjects;

это как-то возможно и что такое синтаксис?

или мне нужно сделать это:

for (int i = 0; i < rowOfObjects.Length; i++)
{
   tableOfObjects[0,i] = rowOfObjects[i];
}

и заполнить строку 2-мерных массивов с помощью цикла?

Спасибо

4b9b3361

Ответ 1

Нет, если вы используете двумерный массив, это невозможно. Вы должны скопировать каждый элемент.

Если вы используете зубчатый массив, он отлично работает:

// create array of arrays
object[][] tableOfObject = new object[10][];
// create arrays to put in the array of arrays
for (int i = 0; i < 10; i++) tableOfObject[i] = new object[10];

// get row as array
object[] rowOfObject = GetRow();
// put array in array of arrays
tableOfObjects[0] = rowOfObjects;

Если вы получаете все данные в виде строк, вам, конечно, не нужен цикл, который помещает массивы в массив массивов, так как вы все равно их замените.

Ответ 2

Если ваш массив является массивом типов значений, это возможно.

int[,] twoD = new int[2, 2] {
    {0,1},
    {2,3}
};
int[] oneD = new int[2] 
    { 4, 5 };
int destRow = 1;
Buffer.BlockCopy(
    oneD, // src
    0, // srcOffset
    twoD, // dst
    destRow * twoD.GetLength(1) * sizeof(int), // dstOffset
    oneD.Length * sizeof(int)); // count
// twoD now equals
// {0,1},
// {4,5}

Это невозможно с массивом объектов.

Примечание. Поскольку .net3.5 это будет работать только с массивом примитивов.

Ответ 3

если у меня есть массивы размера гигабайта, я бы сделал это в С++/CLI, играя с указателями, и делал только memcpy вместо того, чтобы иметь gazillion медленные операции индексации массивов с проверкой границ.

Ответ 4

Итак, что-то вроде:

    public static object[] GetRow()
    {
        object[,] test = new object[10,10];
        int a = 0;
        object[] row = new object[10];
        for(a = 0; a <= 10; a++)
        {
            row[a] = test[0, a];
        }
        return row;
    }