这将是转换平方矩阵的最有效方法
1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)
成
[1 2 3 4 5 6 7 8 9]
Run Code Online (Sandbox Code Playgroud)
在c#中
我在做
int[,] array2D = new int[,] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int[] array1D = new int[9];
int ci=0;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
array1D[ci++] = array2D[i, j]);
}
}
Run Code Online (Sandbox Code Playgroud)
LINQ使这个变得微不足道.
int[,] array2d = ...;
var array1d = array2d.Cast<int>().ToArray();
Run Code Online (Sandbox Code Playgroud)
否则,你的方式是充足的,但可以推广:
int[,] array2d = ...;
var rows = array2d.GetLength(0);
var cols = array2d.GetLength(1);
var array1d = new int[rows * cols];
var current = 0;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
array1d[current++] = array2d[i, j];
}
}
Run Code Online (Sandbox Code Playgroud)
甚至:
int[,] array2d = ...;
var array1d = new int[array2d.GetLength(0) * array2d.GetLength(1)];
var current = 0;
foreach (var value in array2d)
{
array1d[current++] = value;
}
Run Code Online (Sandbox Code Playgroud)
您最好一次性分配完整的结果数组,然后将数据复制进去。
你应该找到这样的总大小;
var size = arrays.Sum(a=> a.Length);
var result = new int[size];
Run Code Online (Sandbox Code Playgroud)
然后使用 Array.CopyTo 复制数组,而不是自己循环;
var cursor = 0;
foreach(var a in arrays) {
a.CopyTo(result, cursor);
cursor += a.Length;
}
Run Code Online (Sandbox Code Playgroud)
Array.CopyTo 将比您自己的循环更快;至少,不慢。它可能会在内部使用C 的 memcpy函数来执行低级块复制。这已经是你能达到的最高效率了。
| 归档时间: |
|
| 查看次数: |
10905 次 |
| 最近记录: |