2016-11-25 12 views
1

NAの値を持つ列を削除したい。Javaの2D配列列を削除する方法

例:array [i、j]にNAが指定されている場合、i番目の列を削除します。 find2DIndexはNAの値を、removeNAはi番目の列を削除します。

NA値を削除するための努力にもかかわらず、まだ

private static Point find2DIndex(Object[][] array, Object search) { 

    if (search == null || array == null) return null; 

    for (int rowIndex = 0; rowIndex < array.length; rowIndex++) { 
     Object[] row = array[rowIndex]; 
     if (row != null) { 
      for (int columnIndex = 0; columnIndex < row.length; columnIndex++) { 
      if (search.equals(row[columnIndex])) { 
       return new Point(rowIndex, columnIndex); 
      } 
      } 
     } 
    } 
    return null; 
} 


public static String[][] removeNA(String[][] str){ 

    Point index = new Point(); 

    if((index= find2DIndex(str,"NA"))!=null){ 
    for(int j=0;j<49;j++){ 
     for(int i=index.y;i<str.length/49;i++){ 
       str[j][i]= str[j][i+1]; 
      }//j열 모두 지우기 
     } 
    } 
       return str; 
} 


public static void main(String[] args) throws IOException { 
    String str = readCSV(new File("D:/sample.csv")); 

    String[] strArr = parse(str); // String 배열에 차곡차곡 담겨서 나온다. 

    String[][] Array2D = new String[27][45]; 

    for(int i=0; i<45;i++){ 
     for(int j=0;j<27;j++){ 
      String k = strArr[i*27+j]; 
      Array2D[j][i]= k; 

       } 
      } 

答えて

1

...配列の値NAが存在しますが、新しい次元でそれを破壊し、再構築しない限り、既存のアレイデータ構造の大きさを変更することはできません(あなたは再初期化して、再設定する必要があります)。

このようなことを試すことができます。

public int[][] deleteColumn(int[][] args,int col) 
{ 
    int[][] nargs; 
    if(args != null && args.length > 0 && args[0].length > col) 
    { 
     nargs = new int[args.length][args[0].length-1]; 
     for(int i=0; i<args.length; i++) 
     { 
      int newColIdx = 0; 
      for(int j=0; j<args[i].length; j++) 
      { 
       if(j != col) 
       { 
        nargs[i][newColIdx] = args[i][j]; 
        newColIdx++; 
       }    
      } 
     } 
    } 
    return nargs; 
} 
関連する問題