2016-11-25 123 views
1

我想删除具有NA值的列。如何删除java中的二维数组列

举例,当array [i,j]有NA时,我想删除第i列。 find2DIndex查找NA值,removeNA删除第i列。

尽管努力消除NA值,还存在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

,除非你破坏并与新的维度重建它不能更改现有的阵列数据结构的维度(你必须重新初始化和重新填充)。

你可以尝试这样的事情。

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; 
}