Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 双[]->;双[,]_C# - Fatal编程技术网

C# 双[]->;双[,]

C# 双[]->;双[,],c#,C#,好奇的是,有没有更快/更整洁的方法来实现这一点: double[] source = ... // some initialisation var target = new double[1, source.Length]; for (var c = 0; c < source.Length; c++) { target[0, c] = source[c]; } double[]源=…//一些初始化 var目标=新的双精度[1,source.Length]; for(var c

好奇的是,有没有更快/更整洁的方法来实现这一点:

double[] source = ... // some initialisation

var target = new double[1, source.Length];
for (var c = 0; c < source.Length; c++)
{
    target[0, c] = source[c];
}
double[]源=…//一些初始化
var目标=新的双精度[1,source.Length];
for(var c=0;c
初始化数组,如下所示:

double[,] target = { { /* your list of values */ } };

然后就是一个只有一行的二维数组。

如下初始化数组:

double[,] target = { { /* your list of values */ } };

那么您就有了一个只有一行的二维数组。

因为您提到这是用于p/Invoke的,所以使用BlockCopy可能是合理的:

double[] source = new double [] {1,2,3,4,7,8,9,0};// some initialisation
double[,] target = new double[1, source.Length];

Buffer.BlockCopy(source, 0, target, 0, source.Length * sizeof(double));

因为您提到这是针对p/Invoke的,所以使用BlockCopy可能是合理的:

double[] source = new double [] {1,2,3,4,7,8,9,0};// some initialisation
double[,] target = new double[1, source.Length];

Buffer.BlockCopy(source, 0, target, 0, source.Length * sizeof(double));


alphas
是否保证为与源相同长度的数组?为什么需要这样做?为什么要创建一个只有一行的二维数组?如果您现在了解了目标在内存中的布局,我想您可以使用,但这肯定是不可移植和脆弱的…很抱歉出现了一个错误(alpha->source)。我必须为一些pinvoke的东西做这个…还不清楚。如果您只需要初始化一个具有某个值的二维数组,那么我的答案就解决了它。但我认为您应该提供更多关于您的确切问题的信息。
alphas
是否保证为与源相同长度的数组?为什么需要这样做?为什么要创建一个只有一行的二维数组?如果您现在了解了目标在内存中的布局,我想您可以使用,但这肯定是不可移植和脆弱的…很抱歉出现了一个错误(alpha->source)。我必须为一些pinvoke的东西做这个…还不清楚。如果您只需要初始化一个具有某个值的二维数组,那么我的答案就解决了它。但是我认为你应该提供更多关于你的确切问题的信息。我猜他可能从其他地方得到了第一个数组,所以他不能使用数组初始值设定项。至少我是这样理解这个问题的。我猜他可能从其他地方得到了第一个数组,所以他不能使用数组初始值设定项。至少我是这样理解这个问题的。听起来很有趣。与double[,]target={{{/*您的值列表*/}}相比,它有什么优势;?谢谢。@csetzkorn不是在从
double[]
转换到
double[,]
你的问题的重点吗?因此,如果他直接初始化
double[,]
,它就不会再回答你的问题了。@csetzkorn,如果你能将值硬编码到初始化器中,无论如何,这样做,会更简单。但是,如果不能用编译时常量来表示数组,就不能使用这种方法。@CodesInChaos:我仍然可以注释,不是吗?如果有必要,我会发布另一个问题。我认为你的评论没有多大帮助。听起来很有趣。与double[,]target={{{/*您的值列表*/}}相比,它有什么优势;?谢谢。@csetzkorn不是在从
double[]
转换到
double[,]
你的问题的重点吗?因此,如果他直接初始化
double[,]
,它就不会再回答你的问题了。@csetzkorn,如果你能将值硬编码到初始化器中,无论如何,这样做,会更简单。但是,如果不能用编译时常量来表示数组,就不能使用这种方法。@CodesInChaos:我仍然可以注释,不是吗?如果有必要,我会发布另一个问题。我认为你的评论没有多大帮助。