-2

我有两个一维数组。我想将这两个数组转换为单个二维数组。

我的代码是:

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)}

注意:arrayRowarrayCol可能有不同的长度。在这种情况下,没有对的元素应该存储在新的一维数组result[]中。

4

3 回答 3

4

您的arrayRow[]andarrayCol[]将只是二维数组的两行(如果您不是指锯齿状的)。

所以将两个数组合并为一个的代码就是:

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;
}

正如已经提到的那样,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);
}
于 2012-12-01T09:25:59.187 回答
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];
于 2012-12-01T09:25:41.497 回答
0

更高性能/另一种方式:

public static void ConvertFlatArrayToMatrix(int[] array, int[,] matrix, int dimension) {
        for(int i = 0; i < array.Length; i++) {
            int r = Mathf.FloorToInt(i / dimension);
            int c = i % dimension;

            matrix[c,r] = array[i];
        }
    }

这只会将结果推送到您传入的二维数组中。

请记住,我不是在这里检查长度或防止任何事情,这只是完成工作的概念和最低限度。

于 2017-05-28T23:18:29.510 回答