2013-02-24 95 views
0

只是好奇,是有一个更快/更简洁的方式来实现这一目标:双[] - >双击[,]

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

var target = new double[1, source.Length]; 
for (var c = 0; c < source.Length; c++) 
{ 
    target[0, c] = source[c]; 
} 
+0

是'alphas'保证是相同的长度,源的阵列? – driis 2013-02-24 10:36:56

+0

你为什么需要这样做?为什么只用一行创建一个二维数组? – 2013-02-24 10:38:47

+1

如果你现在如何在内存中的布局目标我想你可以使用http://msdn.microsoft.com/en-us/library/system.buffer.blockcopy.aspx但肯定不是便携式和脆弱的... – rene 2013-02-24 10:39:14

回答

2

Initialiaze数组是这样的:

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

然后你有两个只有一行的二维数组。

+0

我猜他可能会从其他地方传递第一个数组,所以他不能使用数组初始值设定项。至少我是如何阅读这个问题的。 – driis 2013-02-24 10:46:19

+0

这是正确的。 – cs0815 2013-02-24 10:53:03

2

既然你提的这是对的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)); 
+0

听起来很有趣。有什么优势:double [,] target = {{/ *您的值列表* /}};?谢谢。 – cs0815 2013-02-24 10:54:29

+0

@csetzkorn是不是从'double []'转换成'double [,]'是你问题的要点?所以如果他直接初始化'double [,]',它不会回答你的问题了。 – CodesInChaos 2013-02-24 10:55:52

+1

@csetzkorn,如果您处于可以将值硬编码到初始化程序中的位置,那么做起来会更简单。但是如果你不能通过编译时间常量来表达数组,那么就不能使用这种方法。 – driis 2013-02-24 11:01:24