2014-11-04 72 views
-1

是否可以將數據從多個[] []複製到單個[]?!?將多個數組轉換爲單個數組(java)

double multi[][] = { {1.0, 2.0}, {2.11, 204.00, 11.00, 34.00},{66.5,43.3,189.6}}; 

double single [] = {1.0, 2.0, 2.11, 204.00, 11.0, 66.5,43.3,189.6} 
+0

你試過了什麼?郵寄一些代碼,你會怎麼做。 – Icewind 2014-11-04 16:35:48

+0

僅供參考:在Java中,它通常寫'double [] [] multi'而不是'double multi [] []'。既然你有一個double('double [] []')數組的數組,而不是一個多數組數組的數組)。 – GameDroids 2014-11-04 16:42:49

+0

@GameDroids - 實際上,只有一個變量被聲明時,這兩種形式是相同的。當在一行上聲明多個變量時,會出現差異:'double multi [] [],single [];'聲明'multi'是一個二維數組,'single'是一維數組;如果行以'double [] [] ...'開頭,那麼所有東西都是二維數組(或二維數組數組)。然而,你可以寫:'double [] multi [],single;'來獲得所需的聲明。 (我不明白你對「多列數組陣列」的評論部分。) – 2014-11-04 16:49:46

回答

3

與Java 8,你可以這樣寫:

double[] single = Arrays.stream(multi) //Creates a Stream<double[]> 
      .flatMapToDouble(Arrays::stream) //merges the arrays into a DoubleStream 
      .toArray(); //collects everything into a double[] array 
+0

好的解決方案。出於好奇(因爲我還沒有使用Java 8),這會正確處理'multi'元素爲'null'嗎? – 2014-11-04 16:55:27

+0

@TedHopp不會拋出NPE - 但你可以在'flatMapToDouble'之前添加一個'.filter(Objects.nonNull)'來跳過空條目。 – assylias 2014-11-04 17:30:03

0
+0

這是一個不正確的(或至少不完整的)解決方案。 'ArrayUtils.addAll'將返回一個新的數組,它是'array1'和'array2'的串聯。 OP想要連接'multi'的所有元素。人們可以在'addAll'上構建一個一個地連接元素,但這是非常低效的。此外,'ArrayUtils'不是標準API的一部分;它需要使用第三方Apache Commons庫。 – 2014-11-04 16:45:59

1

如果你要邏輯way..first你必須要找到的MULTY數組內容的長度。而然後進行單[]與長度並添加值

double multy[][] = { {1.0, 2.0}, {2.11, 204.00, 11.00, 34.00},{66.5,43.3,189.6}}; 
int y=0; 
for(int x=0;x<multy.length,x++){ 
    for(int i=0;i<multy[x].length,i++){ 
     y++; 
    } 
} 
double single [] =new double[y]; 
y=0; 

for(int x=0;x<multy.length,x++){ 
    for(int i=0;i<multy[x].length,i++){ 
     y++; 
     single[y]==multy[x][i]; 
    } 
} 
2

這是完全可能的。根據每個@assylias's answer,Java 8都有非常好的解決方案。如果您不使用Java 8,則必須手動完成一些工作。由於multi元素的長度不同,因此最有效的做法是使用兩次傳遞:第一次計算結果中需要多少元素,第二次實際複製分配數組後的元素:

int n = 0; 
for (int[] elt : multi) { 
    n += elt.length; 
} 
double[] single = new double[n]; 
n = 0; 
for (int[] elt : multi) { 
    System.arraycopy(elt, 0, single, n, elt.length); 
    n += elt.length; 
} 

如果在所有可能的multi元素是null,你要新增內每個環適當的檢查。

+0

大幫忙!!!非常感謝!!! – shamy 2014-11-04 17:17:37

相關問題