我的 n 值在相同的最小和最大范围内。
// value range
int minValue = 0;
int maxValue = 100;
int valueCount = 3; // number of values
// Example 1
int a = 0;
int b = 0;
int c = 0;
// Example 2
int a = 100;
int b = 100;
int c = 100;
// Example 3
int a = 12;
int b = 80;
int c = 27;
示例 1 和 2 显示了这 3 个值的最小和最大变化,其中示例 3 显示了一些随机值。
对于给定的最小值和最大值,这 3 个值的所有变化的可能数量是 100 * 100 * 100 = 1.000.000。
因此,如果我定义 0 代表示例 1 的变化,而 1.000.000 代表示例 2 的变化。我如何计算代表示例 3 的值?
或者更好的是,我如何遍历所有可能的变化以及如何恢复它们。
for(int i = 0; i <= 1000000; i++)
{
int[] values = GetValues(i, minValue, maxValue, valueCount);
}
所以我正在寻找的是像上面的 GetValues() 方法一样工作的东西。
最佳答案
这就像在知道该单元格的内存偏移量时查找 n 维数组的索引。
public static IEnumerable<int> GetValues(long i, int minValue, int maxValue, int valueCount)
{
var range = maxValue - minValue + 1;
for (int j = 0; j < valueCount; j++)
{
yield return (int)(i % range + minValue);
i = i / range;
}
}
正如我在评论中提到的,您提供的示例是错误的。
有 1030301 个变化,因为每个项目可以有 101 不同的值(从 0 到 100),变化总数为 101*101 *101 = 11030301
。
关于c# - 长期存储和恢复变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34360089/