-2

私は2つの1Dアレイを持っています。これらの2つの配列を単一の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}myArray [ 、arrayCol[]={4,5,6}] = {(1,4)、(2,5)、(3,6)}がある場合

注:arrayRowarrayColは長さが異なる場合があります。このような場合、ペアを持たない要素は、新しい1次元配列に格納する必要がありますresult[]

4

3 に答える 3

4

あなたのarrayRow[]arrayCol[]は、2次元配列の2行になります(ギザギザの配列を意味していなかった場合)。

したがって、2つの配列を1つに統合するコードは次のとおりです。

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

これにより、渡した2D配列に結果がプッシュされます。

ここでは長さをチェックしたり、何かから保護したりしているわけではないことを覚えておいてください。これは単なる概念であり、仕事を成し遂げるための最低限のことです。

于 2017-05-28T23:18:29.510 に答える