我有两个1D阵列。我想将这两个数组转换为单个2D数组。
我的代码是:
public Static void Main()
{
int[] arrayRow;
int[] arrayCol;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
{
int[,] myArray = new int[row,column];
myArray[i,j] = arrayRow[i]; // not possible -- your suggestions
}
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
{
Console.Write(myArray[i,j]);
}
}
}
我需要在arrayRow[]
中保存arrayCol[]
和myArray[,]
。
例如,
如果我们有arrayRow[]={1,2,3}
和arrayCol[]={4,5,6}
,那么myArray [,] = {(1,4),(2,5),(3,6)}
注意:arrayRow
和arrayCol
可能有不同的长度。在这种情况下,没有对的元素应存储在新的单维数组result[]
中。
答案 0 :(得分:4)
你的arrayRow[]
和arrayCol[]
只是两行二维数组(如果你不是指锯齿状的那一行)。
所以将两个数组合二为一的代码就是:
public static T[,] Union<T>(T[] first, T[] second) //where T : struct
{
T[,] result = new T[2, Math.Max(first.Length, second.Length)];
int firstArrayLength = first.Length * Marshal.SizeOf(typeof(T));
Buffer.BlockCopy(first, 0, result, 0, firstArrayLength);
Buffer.BlockCopy(second, 0, result, firstArrayLength, second.Length * Marshal.SizeOf(typeof(T)));
return result;
}
作为it have been mentinoned,BlockCopy
比for
周期更冷。
如果您执行意味着您需要一个锯齿状数组(如int[][]
),那么解决方案将更简单:
public static T[][] UnionJagged<T>(T[] first, T[] second)
{
return new T[2][] { first, second };
}
如果我们添加多个数组作为参数的功能,那么转换为更简单:
public static T[][] UnionJagged<T>(params T[][] arrays)
{
return arrays;
}
static void Main()
{
int[] a = new int[] { 10, 2, 3 };
int[] b = new int[] { -1, 2, -3 };
int[] c = new int[] { 1, -2, 3 };
int[][] jaggedThing = UnionJagged(a, b, c);
}
答案 1 :(得分:1)
int[] arrayRow;
int[] arrayCol;
int[,] myArray = new int[Math.Max(arrayRow.Length, arrayCol.Length), 2];
for (int i = 0; i < arrayRow.Length; i++)
myArray[i, 0] = arrayRow[i];
for (int i = 0; i < arrayCol.Length; i++)
myArray[i, 1] = arrayCol[i];
答案 2 :(得分:0)
更高效/另一种方式:
'\0'
这会将结果推送到您传入的2d数组中。
请记住,我不是在检查长度或防止任何事情,这只是完成工作的概念和最低限度。