그것은 완전히 잘못이다. 그런 식으로 b
을 얻을 수 없습니다. 그리고 심지어 초기화가 잘못되었습니다. .NET에는 두 가지 유형의 다차원 배열이 있습니다. 진정한 다차원 배열과 가변 배열 ...
시작 ... 귀찮은 배열을 사용하고 있습니다. 차이는
int[][] a = new int[10][]; // see how you define it?
// Only the first dimension can be is sized here.
for (int i = 0; i < a.Length; i++)
{
// For each element, create a subarray
// (each element is a row in a 2d array, so this is a row of 10 columns)
a[i] = new int[10];
}
이제 10 × 10 배열 가변 배열을 정의), 당신은 ... 그것을 요구하지 않았다 당신이 그들을 필요로하는 경우, 그것을 구글.
이제 조금 LINQ :
이
int[][] c = b.Select(row => row.ToArray()).ToArray();
첫 번째 표현은
foreach element of a, we call this element row `a.Select(row =>` <br>
make of this element a List `row.ToList()` and return it<br>
of all the results of all the elements of a, make a List `.ToList();`
을 의미한다 : 당신이 다시 배열을 원하는
List<List<int>> b = a.Select(row => row.ToList()).ToList();
:
당신은 목록을 원하는 두 번째는 반사입니다.
지금 ... 호기심에서 벗어나 진정한 다차원 배열이 있다면? 그때 그것은 매우 복잡했습니다. 우리가 List<List<int>>
에 다차원 배열을 "변환"할 수있는 까다로운 (끔찍한) LINQ 식
int[,] a = new int[10,10];
int l0 = a.GetLength(0);
int l1 = a.GetLength(1);
var b = new List<List<int>>(
Enumerable.Range(0, l0)
.Select(p => new List<int>(
Enumerable.Range(0, l1)
.Select(q => a[p, q]))));
var c = new int[b.Count, b[0].Count];
for (int i = 0; i < b.Count; i++)
{
for (int j = 0; j < b[i].Count; j++)
{
c[i, j] = b[i][j];
}
}
. 도로 뒷쪽은 LINQ로 쉽게 수행 할 수 없습니다 (List<T>.ForEach()
을 사용하지 않으려면 사용하지 않아야합니다. 더 정교하지 않고 List<T>.ForEach()
이 LINQ가 아니기 때문에) ... 그러나 두 개의 중첩 된 for()
으로 쉽게 수행 할 수 있습니다.