2012-06-04 47 views
5

我有像函數簽名:轉換型雙[] []浮動

static public double[][] G2Sweep(int row1, int row2, double[][] mtx) 
{ 
    mtx = (float) mtx; 
} 

但我需要雙[] []矩陣隱蔽成浮點值。這是如何完成的代碼不能明確地轉換它?

+0

是否要轉換整個矩陣,保留尺寸?' – Codeman

+0

是的所有值浮動,但我寧願不必做一個for循環,以通過它所有 – cdub

+1

請不要用「C#」等前綴你的標題。這就是標籤的用途。 –

回答

4

不,你不能將double轉換爲float,特別是對於數組。您需要創建正確類型的副本。

+1

是的,我們不得不做的就是改變一切從雙重到浮動(在我的代碼中的所有554實例)以節省處理能力 – cdub

1

是所有值浮動,但我寧願沒有做一個for循環,通過它羅布泊所有

嗯,很抱歉,但你不能。將陣列投射到類似float(或intStringMonkeyPoo或其他類型)是沒有意義的。如果你需要查看數組中的每個值,那麼你需要一個循環。沒有解決這個事實。

Lamdas和什麼都不歸結爲循環。你只需要咬緊牙關,然後A)在循環中轉換(或使用類似.Cast<float>的東西),或者使用正確的類型開始。

+0

+1的MonkeyPoo :) –

5
public static float[][] Convert(double[][] mtx) 
{ 
    var floatMtx = new float[mtx.Length][]; 
    for (int i = 0; i < mtx.Length; i++) 
    { 
     floatMtx[i] = new float[mtx[i].Length]; 
     for (int j = 0; j < mtx[i].Length; j++) 
      floatMtx[i][j] = (float)mtx[i][j]; 
    } 
    return floatMtx; 
} 

或者:

public static float[][] Convert(double[][] mtx) 
{ 
    return mtx.Select(i => i.Select(j => (float)j).ToArray()).ToArray(); 
} 
+4

Word給智者;儘管第二個例子*看起來更簡單;在內部它會做同樣的循環。雖然閱讀和維護當然更容易! 「 –

-1

您可以避免手工編寫的循環,如果你使用Linq。

float[][] floats = mtx.Select(r=>r.Select(Convert.ToSingle).ToArray()).ToArray(); 

編輯:固定。

+3

」指定的演員表無效。「 -1不嘗試你的代碼。 –

1

確實,你不能就地轉換,你必須循環的值。

但是,現在說這是公平的*內存是便宜

在創建double [] []變量時;爲什麼不簡單地同時創建一個float [] [],所以轉換完成了一個,到位。

在生命週期的其餘部分,您可以使用write數組寫入任務。

這就是說,你能澄清爲什麼你需要一個獨特的浮動和雙數組?

*公平但不一定可以接受;如果它是託管在自己的盒子或虛擬圖像上的web應用程序;那很好。如果這是一個獨立的應用程序,可能需要在上網本或Silverlight的某個地方工作,這是不公平的或罰款。

+0

*「但是,現在說內存很便宜是很公平的。*」 - 我的上網本說你好。如果這個參差不齊的陣列會比較大,那麼創建兩個陣列是一個可怕的解決方案,如果存在任何會否定這種需要的東西。 –

+0

我說*公平*不*完全確定無處不在*。我希望更多的提示操作。創造可能是一個更好的地方,然後看看轉換;在我們知道它是什麼之前,它是沒有意義的!並道歉你的上網本:) –

1

你可以做到這一點的另一種方法是使用Array.ConvertAll方法:

Array.ConvertAll<double, float>(doubles, d => (float)d); 

做同樣的循環和明確的轉換,但看起來更好。

+0

這應該是被接受的答案。 –