Попытка преобразовать 2d массив в 1d, может кто-нибудь мне помочь - PullRequest
0 голосов
/ 14 декабря 2018

Может кто-нибудь помочь мне преобразовать 2d массив в 1d массив?2d массив скомпилирован случайно. Также я новичок в C #, и да, я прошу прощения за мой английский) Спасибо!

 Random rnd = new Random();
        int[,] lala = new int[5, 6];
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 6; j++)
            {
                lala[i, j] = rnd.Next(1, 10);
                Console.Write(lala[i, j] + " ");
            }
            Console.WriteLine();

        }
        Console.ReadKey();
        int i, j;
        int[] b = new int[30];
        int k = 0;
        for (i = 0; i < 5; i++)
        {
            for (j = 0; j < 6; j++)
            {
                b[k++] = lala[i, j];
            }
        }

        for (i = 0; i < 5 * 6; i++)
        {
            Console.WriteLine(b[i] + " ");
        }
        Console.ReadKey();

Ответы [ 3 ]

0 голосов
/ 15 декабря 2018
        Random rnd = new Random();
        int[,] lala = new int[5, 6];
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 6; j++)
            {
                lala[i, j] = rnd.Next(1, 10);
                Console.Write(lala[i, j] + " ");
            }
            Console.WriteLine();
        }
        Console.ReadKey();
        //int i, j;
        int[] b = new int[30];
        int k = 0;
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 6; j++)
            {
                b[k++] = lala[i, j];
            }
        }

        for (int i = 0; i < 5 * 6; i++)
        {
            Console.WriteLine(b[i] + " ");
        }
        Console.ReadKey();

Ваша ошибка была в том, что в объявлении переменных 'i' и 'j'.Я рекомендую вам объявлять переменную в том контексте, в котором вы хотите ее использовать, и не использовать ее повторно из этого контекста.

0 голосов
/ 15 декабря 2018

Быстрый однострочник с использованием методов расширения Linq Cast и ToArray сделает свое дело.Я считаю, что Cast просто берет каждый элемент в массиве (из всех измерений), приводит их к указанному типу и возвращает их в IEnumerable (который ToArray затем преобразуется в массив):

int[] oneDimensionalArray = twoDimensionalArray.Cast<int>().ToArray();

Другой способ сделать это - цикл foreach, который будет перебирать оба измерения вашего двухмерного массива:

int index = 0;

foreach (var item in twoDimensionalArray)
{
    oneDimensionalArray[index++] = item;
}

Пример кода:

var rnd = new Random();
var rowCount = 10;
var colCount = 10;

// Populate two dimensional array. You could also use this "double for loop" structure 
// to read the multi-dimensional array and then populate the one dimensional array.
var twoD = new int[rowCount, colCount];

for (var row = 0; row < rowCount; row++)
{
    for (var col = 0; col < colCount; col++)
    {
        twoD[row, col] = rnd.Next();
    }
}

// Populate one dimensional array with a foreach loop. Use a separate 
//  hold the index value for the one dimentional array
var oneD = new int[rowCount * colCount];
var index = 0;

foreach (var item in twoD)
{
    oneD[index++] = item;
}
0 голосов
/ 14 декабря 2018

Если вы просто хотите как-то поместить значения 2D-массива в 1D - вот один из способов

int upper1 = 5;
int upper2 = 6;
int[,] twoD = new int[upper1, upper2];
// fill array

int[] oneD = new int[upper1 * upper2];
int idx = -1;
for (int i = 0; i < upper1; i++)
{
    for (int j = 0; j < upper2; j++)
    {
        oneD[++idx] = twoD[i,j]; 
    }
}
...