我有像函數簽名:轉換型雙[] []浮動
static public double[][] G2Sweep(int row1, int row2, double[][] mtx)
{
mtx = (float) mtx;
}
但我需要雙[] []矩陣隱蔽成浮點值。這是如何完成的代碼不能明確地轉換它?
我有像函數簽名:轉換型雙[] []浮動
static public double[][] G2Sweep(int row1, int row2, double[][] mtx)
{
mtx = (float) mtx;
}
但我需要雙[] []矩陣隱蔽成浮點值。這是如何完成的代碼不能明確地轉換它?
是所有值浮動,但我寧願沒有做一個for循環,通過它羅布泊所有
嗯,很抱歉,但你不能。將陣列投射到類似float
(或int
或String
或MonkeyPoo
或其他類型)是沒有意義的。如果你需要查看數組中的每個值,那麼你需要一個循環。沒有解決這個事實。
Lamdas和什麼都不歸結爲循環。你只需要咬緊牙關,然後A)在循環中轉換(或使用類似.Cast<float>
的東西),或者使用正確的類型開始。
+1的MonkeyPoo :) –
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();
}
Word給智者;儘管第二個例子*看起來更簡單;在內部它會做同樣的循環。雖然閱讀和維護當然更容易! 「 –
您可以避免手工編寫的循環,如果你使用Linq。
float[][] floats = mtx.Select(r=>r.Select(Convert.ToSingle).ToArray()).ToArray();
編輯:固定。
」指定的演員表無效。「 -1不嘗試你的代碼。 –
確實,你不能就地轉換,你必須循環的值。
但是,現在說這是公平的*內存是便宜。
在創建double [] []變量時;爲什麼不簡單地同時創建一個float [] [],所以轉換完成了一個,到位。
在生命週期的其餘部分,您可以使用write數組寫入任務。
這就是說,你能澄清爲什麼你需要一個獨特的浮動和雙數組?
*公平但不一定可以接受;如果它是託管在自己的盒子或虛擬圖像上的web應用程序;那很好。如果這是一個獨立的應用程序,可能需要在上網本或Silverlight的某個地方工作,這是不公平的或罰款。
*「但是,現在說內存很便宜是很公平的。*」 - 我的上網本說你好。如果這個參差不齊的陣列會比較大,那麼創建兩個陣列是一個可怕的解決方案,如果存在任何會否定這種需要的東西。 –
我說*公平*不*完全確定無處不在*。我希望更多的提示操作。創造可能是一個更好的地方,然後看看轉換;在我們知道它是什麼之前,它是沒有意義的!並道歉你的上網本:) –
你可以做到這一點的另一種方法是使用Array.ConvertAll方法:
Array.ConvertAll<double, float>(doubles, d => (float)d);
做同樣的循環和明確的轉換,但看起來更好。
這應該是被接受的答案。 –
是否要轉換整個矩陣,保留尺寸?' – Codeman
是的所有值浮動,但我寧願不必做一個for循環,以通過它所有 – cdub
請不要用「C#」等前綴你的標題。這就是標籤的用途。 –