【问题标题】:How to store a vector of N dimensions in a datatable in C#?如何在 C# 的数据表中存储 N 维向量?
【发布时间】:2009-05-18 12:59:43
【问题描述】:

如何在 C# 中将 N 维向量存储在数据表中?

【问题讨论】:

    标签: c# datatable


    【解决方案1】:

    对于真正的 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[][][]。
    • 围绕上述数组代码构建一个集合很容易。
    • @Nick - 确实;添加了锯齿状示例;获得正确的代码只需要更长的时间!但是,如果您不确定维度的 number,则很难使用锯齿状数组。
    • 这与数据表有什么关系?
    • @Dave - DataTable 固定为 2D。要超越 2D,您可能需要不同的技巧。
    【解决方案2】:

    如果预先知道维度的数量,您可以只为每个维度创建一个“列”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-17
      • 2020-12-01
      • 2015-06-04
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      相关资源
      最近更新 更多