Конвертировать 2-мерный массив - PullRequest
17 голосов
/ 13 марта 2009

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

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

Ответы [ 3 ]

47 голосов
/ 13 марта 2009

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

int[,] from = new int[,] {{1,2},{3,4},{5,6}};
int[] to = from.Cast<int>().ToArray();
21 голосов
/ 13 марта 2009

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();
0 голосов
/ 03 декабря 2018

мое решение:

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;
    }
}
...