Преобразование 2-мерного массива

Что такое selectMany.ToArray() метод? Это встроенный метод в C#?

Мне нужно преобразовать двумерный массив в одномерный массив.

Ответы

Ответ 1

Если вы имеете в виду зубчатый массив (T[][]), SelectMany - ваш друг. Если, однако, вы имеете в виду прямоугольный массив (T[,]), то вы можете просто перечислить данные даты через foreach - или:

int[,] from = new int[,] {{1,2},{3,4},{5,6}};
int[] to = from.Cast<int>().ToArray();

Ответ 2

SelectMany - оператор проектирования, метод расширения, предоставляемый пространством имен System.Linq.

Он выполняет проекцию от одного до многих элементов над последовательностью, позволяя вам "сгладить" полученные последовательности в один.

Вы можете использовать его следующим образом:

int[][] twoDimensional = new int[][] { 
                                      new int[] {1, 2},
                                      new int[] {3, 4},
                                      new int[] {5, 6}
                                     };

int [] flattened = twoDimensional.SelectMany(x=>x).ToArray();

Ответ 3

мое решение:

public struct Array3D<T>
{
    public T[] flatten;
    int x_len;
    int y_len;
    int z_len;

    public Array3D(int z_len, int y_len, int x_len)
    {
        this.x_len = x_len;
        this.y_len = y_len;
        this.z_len = z_len;
        flatten = new T[z_len * y_len * x_len];
    }

    public int getOffset(int z, int y, int x) => y_len * x_len * z + x_len * y + x;

    public T this[int z, int y, int x] {
        get => flatten[y_len * x_len * z + x_len * y + x];
        set => flatten[y_len * x_len * z + x_len * y + x] = value;
    }

    public T this[int flat_index] {
        get => flatten[flat_index];
        set => flatten[flat_index] = value;
    }
}