我有一个方法,它以二维数组作为参数。
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;
}
有更有效/聪明的方法吗?
答案 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;
}
}