将数组复制到2D数组,长度为1,用于第二维

时间:2013-11-21 14:34:31

标签: c# arrays multidimensional-array

我有一个方法,它以二维数组作为参数。

void Process(object[,] array)
{
   // do something
}

此方法也可用于只有一个“行”的二维数组,例如:

等变量
object[,] flatArray = new object[N,1];

我有一维数组,我现在想把它当作二维数组。我能提出的最佳解决方案是:

private object[,] Make2D(object[] array)
{
    object[,] result = new object[array.Length, 1];
    for(int i = 0; i < array.Length; i++)
    {
        result[i, 0] = items[i];
    }
    return result;
}

有更有效/聪明的方法吗?

3 个答案:

答案 0 :(得分:1)

我建议您使用泛型来避免以后再进行投射:

private T[,] Make2D<T>(T[] array)
{
    T[,] result = new T[array.Length, 1];
    for (int i = 0; i < array.Length; i++)
    {
        result[i, 0] = array[i];
    }
    return result;
}

以下是您如何使用它:

int[] example = new int[15];
//insert data to example
Make2D<int>(example);

答案 1 :(得分:1)

我认为您的代码没有任何问题。

我不喜欢C#中的多维数组,它们很难使用,在框架中缺少使用它们的工具......例如:你不能将Array.Resize与多维数组一起使用。

我更喜欢计算单维数组的索引,并模拟多维数组而不是使用多维数组。这样,您可以自由地处理数组,而无需进行数组转换。

答案 2 :(得分:0)

public static class Program
{
    static void Main(string[] args)
    {

        var test = new[] {1, 2, 3}.To2D();
    }

    public static T[,] To2D<T>(this T[] array)
    {
        if (array == null) throw new ArgumentNullException("array");

        var i = 0;
        var res = new T[array.Length, 1];

        Array.ForEach(array, o => res[i++, 0] = o);

        return res;
    }
}