2013-02-24 65 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