我们有两个数组
let a' = Array2D.init 1 1 (fun x y -> 1)
和
//START OF NOT WORKING PART//
double xstar;
double[] xoverhdarray = new double[] { -5, -4, -3 };
foreach (double xoverhd in xoverhdarray)
{
if (xoverhd == -5)
{
xstar = (xoverhd + 0.5) * 2;
MessageBox.Show(xstar.ToString());
}
}
//NOT WORKING PART//
第一个返回int [] [],第二个返回int [,]
有没有简单的方法将int [,]转换为int [] []?
答案 0 :(得分:3)
没有内置函数可以执行此操作。我会使用列表理解语法,这似乎很简单:
let a =
[| for i in 0..(Array2D.length1 a' - 1) ->
[| for j in 0..(Array2D.length2 a' - 1) -> a'.[i,j] |] |]
需要注意的一点是基本指数。在你的例子中,数组是从零开始的,所以我只使用了零来缩短代码。但是,如果您需要支持基于非零的数组的情况,则必须执行a'.[ i + Array2D.base1 a', j + Array2D.base2 a' ]
。不是那么优雅,而是watchagonnado。
答案 1 :(得分:1)
如果您构建了您感兴趣的数组,则可以使用两个[][]
构建Array.init
(又称锯齿状数组)表单
e.g。
Array.init 10 (fun r -> Array.init 20 (fun c -> (c+r)))
[|[|0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19|];
[|1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20|];
[|2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; 21|];
...