【发布时间】:2019-06-10 20:54:40
【问题描述】:
在 MQL4 中,我可以使用以下函数来打印二维数组中的值:
string Arr2ToString(double& arr[][], string dlm = ",", int digits = 2) {
string res = "";
int i, j;
for (i = 0; i < ArrayRange(arr, 0); i++) {
res += "[";
for (j = 0; j < ArrayRange(arr, 1); j++) {
res += StringFormat("%g%s", NormalizeDouble(arr[i][j], digits), dlm);
}
res = StringSubstr(res, 0, StringLen(res) - StringLen(dlm));
res += "]" + dlm;
}
res = StringSubstr(res, 0, StringLen(res) - StringLen(dlm));
return res;
}
但是在 MQL5(版本 5.00,构建 1966)中,上述函数不再起作用,并且出现以下错误:
'[' - 无效的索引值 Array.mqh
在传递arr[][]时的第一行。
我已经检查过,MQL5 不再允许传递没有维度大小的数组。
将多维数组传递给函数时,应指定维度大小(第一个除外):
double var[][3][3]; void Func(double &arg[][3][3]){ // ... }
来源:MQL5 PROGRAMMING BASICS: ARRAYS。
这没有意义。
假设我不知道数组的大小(因为我想将此函数重新用于多种数组类型,并且为每个大小定义数十个单独的函数是荒谬的),现在如何打印值来自存储双精度值的多维数组(例如二维数组)?
【问题讨论】:
-
是的,我们不能将多维数组传递给我们的函数,但如果您只是需要打印数组,您可以使用
ArrayPrint()函数mql5.com/en/docs/array/arrayprint -
@TheLastStark 你认为
ArrayPrint()支持二维数组吗?从文档中,不清楚。 -
我试过了吗,MQL5 函数适用于多维数组
-
您也可以将其作为答案发布(至少它回答了主要的标题问题),因为我不知道。遗憾的是,您无法从中获取字符串(因此您不能将它与文件一起使用,例如以纯格式存储数组值),它会迫使您打印它。
-
我确实添加了它作为答案,但是你是对的,看到他们设置了这个限制也有点可悲,我很想知道为什么限制只针对 MQL5跨度>