Преобразование 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;
}
}