我有隻得到double[][]
我想通過int[][]
的方法,有沒有在Java中這樣做,東西一樣簡單的一小段路:最短途徑2D雙
int [][] iArray = {
{ 1, 2, },
{ 5, 6, }
};
double [][] dArray = (double[][]) iArray ; ???
我有隻得到double[][]
我想通過int[][]
的方法,有沒有在Java中這樣做,東西一樣簡單的一小段路:最短途徑2D雙
int [][] iArray = {
{ 1, 2, },
{ 5, 6, }
};
double [][] dArray = (double[][]) iArray ; ???
不幸的是,鑄造你的數組的唯一方法是遍歷每個元素並逐個投射,同時重新插入新的double[][]
數組。
沒有捷徑。
不,這是不正確的輸入。 int []是一個類型,double []是一個類型,它們沒有關係,所以這樣的賦值是不允許的。因此,沒有辦法施展這一點。
您將不得不復制元素(您可以將int分配給double而不投射)。
你可以這樣說:
int[][] intarray = {{1, 2}, {5, 6}};
double[][] doublearray = new double[intarray.length][intarray[0].length];
for(int i = 0; i < intarray.length; i++)
{
for(int j = 0; j < intarray[0].length; j++)
doublearray[i][j] = (double) intarray[i][j];
}
編輯:作爲Andreas_D指出,這只是工作,如果所有行都是一樣的lenght的,如果你想變lenght,你必須遍歷第二個用於可變數量列的循環。
這隻適用於所有行具有相同長度的情況。 – 2012-03-14 21:39:59
雖然你不需要做鑄造,所以你可以省略「(雙)」。 @Andreas;是。 – Martin 2012-03-14 21:40:09
嗯,我的代碼寫在Java 8值得叫的快捷方式?
import java.util.Arrays;
// ...
/// Cast!
int[][] int2DArray = {{3, 1}, {3, 3, 7}, {}};
Object[] arrayOfUntypedArraies = Arrays.stream(int2DArray).map(intArray -> Arrays.stream(intArray).asDoubleStream().toArray()).toArray();
double[][] double2DArray = Arrays.copyOf(arrayOfUntypedArraies, arrayOfUntypedArraies.length, double[][].class);
/// Print!
System.out.println(Arrays.deepToString(int2DArray));
// [[1, 2], [5, 6, 7], []]
System.out.println(Arrays.deepToString(double2DArray));
// [[1.0, 2.0], [5.0, 6.0, 7.0], []]
在Java 8,你都可以投射int
秒的一維數組的double
秒的數組:
double[] singleDimensionDoubleArray =
Arrays.stream(singleDimensionIntArray).asDoubleStream().toArray()
因此,我寫的東西我以爲會被遍歷的是一個速度更快的版本行:
int[][] iArray = {
{1, 2,},
{5, 6,}
};
double[][] dArray = new double[iArray.length][];
for (int row = 0; row < iArray.length; row++) {
dArray[row] = Arrays.stream(iArray[row]).asDoubleStream().toArray();
}
我正要張貼這個答案,但想到我會發布關於如何更快它是天真的每一個元素上循環的一些指標。原來它大約是慢了10倍!我用10000x1000的零陣列對它進行了測試。我想這是額外的對象創造導致放緩。
除非別人可以證明他,我認爲最簡單的解決方案實際上是最快的:
for (int row = 0; row < iArray.length; row++) {
for (int column = 0; column < iArray[0].length; column++) {
dArray[row][column] = (double) iArray[row][column];
}
}
你確定... ??? – Lion 2012-03-14 21:28:40
是的。我的來源是我自己對這個主題的研究。 ;)谷歌搜索將帶給你相同的結論。 – Vache 2012-03-14 21:29:40
+1。這是唯一的方法。應對。 – 2012-03-14 22:08:52