gpt4 book ai didi

c# - n维数组

转载 作者:可可西里 更新时间:2023-11-01 08:18:34 24 4
gpt4 key购买 nike

我想创建一个 n 维 double 组。在编译时,维数 n 是未知的。

我最终将数组定义为字典,键是对应于不同轴的整数数组(因此在 3 维数组中,我将提供 [5, 2, 3] 以获得 double 在数组中的 (5, 2, 3)。

但是,我还需要用从 (0, 0, ... 0) 到 (m1, m2, ... mn) 的 double 值填充字典,其中 m1 到 mn 是每个轴的长度。

我最初的想法是创建嵌套的 for 循环,但由于我仍然不知道我需要多少个(每个维度 1 个),我无法在编译时执行此操作。

我希望我已经以易于理解的方式提出了问题,但请随时要求我详细说明部分。

最佳答案

要创建一个 n 维数组,您可以使用 Array.CreateInstance方法:

Array array = Array.CreateInstance(typeof(double), 5, 3, 2, 8, 7, 32));

array.SetValue(0.5d, 0, 0, 0, 0, 0, 0);
double val1 = (double)array.GetValue(0, 0, 0, 0, 0, 0);

array.SetValue(1.5d, 1, 2, 1, 6, 0, 30);
double val2 = (double)array.GetValue(1, 2, 1, 6, 0, 30);

要填充数组,您可以使用 Rank 属性和 GetLength 方法返回当前维度的长度,使用几个嵌套的 for 循环来执行O(n^m) 算法(警告 - 未经测试):

private bool Increment(Array array, int[] idxs, int dim) {
if (dim >= array.Rank) return false;

if (++idxs[idxs.Length-dim-1] == array.GetLength(dim)) {
idxs[idxs.Length-dim-1] = 0;
return Increment(array, idxs, dim+1);
}
return true;
}

Array array = Array.CreateInstance(typeof(double), ...);
int[] idxs = new int[array.Rank];
while (Increment(array, idxs, 0)) {
array.SetValue(1d, idxs);
}

关于c# - n维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4193440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com