如何在C#中的数据表中存储N维的向量?
答
对于真正的n维的东西,你可能不得不下降到更简单的概念 - 也许是一个多维数组(T[,...,]
)。
如果维数是已知且恒定的(但是> 1),则锯齿状阵列(T[]...[]
)或使用List<T>
等的包装等都是可行的。
使用未知维度的Array
一个例子:
int[] dimensions = { 3, 2, 5 }; // etc
Array arr = Array.CreateInstance(
typeof(int), dimensions);
int[] index = {0,0,0}; // etc
arr.SetValue(3, index);
但是很显然,如果尺寸是已知的更容易:
int[, ,] arr = new int[3, 2, 5];
arr[0, 0, 0] = 3;
与多维数组的问题是,他们能迅速对于CLR来说触摸太大......这是锯齿状阵列或其他包装纸派上用场的地方(通过将其分割成多个小物体) - 但使施工更难:
int[][][] arr = new int[3][][];
for(int i = 0 ; i < 3 ; i++) {
arr[i] = new int[2][];
for(int j = 0 ; j < 2 ; j++) {
arr[i][j] = new int[5];
}
}
arr[0][0][0] = 3;
任何这些通常都可以包装在类中,这可能是明智的做法。
答
如果提前知道维数,则可以为每个维创建一个“列”。
或者,如果每个维度的大小不同,则可以使用锯齿形数组int [] [] []。 – 2009-05-18 13:13:12