2010-03-08 2 views
0

У меня есть 2d массив, скажем так:как уменьшить 2d массив

2 0 8 9 
3 0 -1 20 
13 12 17 18 
1 2 3 4 
2 0 7 9 

Как создать массив уменьшенный на скажем 2-ю строку и третий столбец?

2 0 9 
13 12 18 
1 2 4 
2 0 9 
+0

К сожалению, для этого нет встроенного устройства. Вы должны искать библиотеку манипуляции матрицей. – Thilo

+0

Вы ищете библиотеку или функцию, которую вы могли бы написать, чтобы выполнить действие. – dagoof

+0

Функция, которая позволит мне не печатать, а создавать этот массив. – owca

ответ

4

Удаление строк и столбцов в массивах являются дорогостоящими операциями, потому что вы должны переместить вещи, но эти методы делать то, что вы хотите:

static int[][] removeRow(int[][] data, int r) { 
    int[][] ret = new int[data.length - 1][]; 
    System.arraycopy(data, 0, ret, 0, r); 
    System.arraycopy(data, r+1, ret, r, data.length - r - 1); 
    return ret; 
} 

static int[][] removeColumn(int[][] data, int c) { 
    for (int r = 0; r < data.length; r++) { 
     int[] row = new int[data[r].length - 1]; 
     System.arraycopy(data[r], 0, row, 0, c); 
     System.arraycopy(data[r], c+1, row, c, data[r].length - c - 1); 
     data[r] = row; 
    } 
    return data; 
} 

Вы можете исследовать другие структуры данных, которые допускают более дешевую абсорбцию, хотя, т. е. двусвязные списки. См., Например, Dancing Links.

+1

+1 для предложения другой структуры данных. – Cam

1
public class TestMe { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    int array[][] = {{2,0, 8, 9,}, 
         {3, 0, -1, 20}, 
         {13, 12, 17, 18}, 
         {1, 2, 3, 4,}, 
         {2, 0, 7, 9}}; 

    for(int i=0; i<array.length;i++){ 
     if(i == 1){ 
      continue; 
     } 
     for(int j=0; j<array[i].length;j++){ 
      if(j==2){ 
       continue; 
      } 
      System.out.print(array[i][j]+" "); 
     } 
     System.out.println(""); 
    } 


} 

}

+0

вы можете попробовать! = ... – alphazero

+0

таким образом я могу распечатать его только, но он не дает мне уменьшенный массив:/ – owca

Смежные вопросы