それは完全に間違っています。あなたはb
そのように入ることはできません。そして、初期化さえ間違っています。.NET には 2 種類の多次元配列があります... 真の多次元配列とジャグ配列です...
始めましょう...あなたはギザギザの配列を使用しています(それが何であるか、または違いを教えません。あなたはそれを求めていません...それらが必要な場合は、グーグルで検索してください)
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];
}
これで、10x10 配列のジャグ配列が定義されました。
少しLINQ:
リストが必要です:
List<List<int>> b = a.Select(row => row.ToList()).ToList();
配列を戻したい:
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();`
2 つ目はスペキュラーです。
さて...好奇心から、もしあなたが真の多次元配列を持っていたら? それは複雑で、非常に複雑でした。
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<List<int>>
. List<T>.ForEach()
LINQ では簡単に戻ることはできません (コーシャではなく、LINQ ではないため、使用してはならないを使用したい場合を除きますList<T>.ForEach()
)...しかし、ネストされた 2 つのfor ()