Есть ли способ удалить конкретную строку в 2d массиве? - PullRequest
2 голосов
/ 14 июня 2011

Возможный дубликат:
Как удалить строку в двумерном массиве

Итак, у меня есть 2d массив String[] [] массив, и там как 9 строк, я хочу удалить строку номер пять.Есть ли способ, которым я могу сказать java, чтобы удалить эту пятую строку, как я легко могу сделать с ArrayLists?

Ответы [ 4 ]

4 голосов
/ 14 июня 2011
Примитивные массивы

действительно очень ограничены в своей функциональной области.Если вам необходимо выполнять более сложные операции, подобные этой, самый простой способ - перейти к какой-либо реализации List.

Как:

String[][] array;
array = new String[][]{new String[]{"a", "b", "c"},new String[]{"d", "e", "f"},new String[]{"g", "h", "i"}};

List<String[]> l = new ArrayList<String[]>(Arrays.asList(array));

l.remove(1);
String[][] array2 = l.toArray(new String[][]{});
0 голосов
/ 14 июня 2011

Ну и если вы не хотите использовать списки, я сделал этот метод:

public String[][] removeRowFrom2dArray(String[][] array, int row){
    int rows = array.length;
    String[][] arrayToReturn = new String[rows-1][];
    for(int i = 0; i < row; i++)
        arrayToReturn[i] = array[i];
    for(int i = row; i < arrayToReturn.length; i++)
        arrayToReturn[i++] = array[i];
    return arrayToReturn;
}
0 голосов
/ 14 июня 2011

Используйте следующий код для удаления определенной строки из массива 2d

import java.util.ArrayList;
import java.util.List;


public class RemoveRowFrom2dArray
{
    private double[][] data;

    public RemoveRowFrom2dArray(double[][] data)
    {
        int r= data.length;
        int c= data[0].length;
        System.out.println("....r...."+r+"....c...."+c);
        this.data= new double[r][c];
        for(int i = 0; i < r; i++) {
            for(int j = 0; j < c; j++) {
                    this.data[i][j] = data[i][j];
            }
        }
    }

    /* convenience method for getting a 
       string representation of matrix */
    public String toString()
    {
        StringBuilder sb = new StringBuilder(1024);
        for(double[] row : this.data)
        {
                for(double val : row)
                {
                        sb.append(val);
                        sb.append(" ");
                }
                sb.append("\n");
        }

        return(sb.toString());
    }

    public void removeRowsWithRowNumber(double rowNotToBeAdd)
    {
        List<double[]> rowsToKeep = new ArrayList<double[]>(this.data.length);
        for( int i =0; i<this.data.length; i++){
            if(i!=rowNotToBeAdd){
            double[] row = this.data[i];
            rowsToKeep.add(row);
            }
        }

        this.data = new double[rowsToKeep.size()][];
        for(int i=0; i < rowsToKeep.size(); i++)
        {
                this.data[i] = rowsToKeep.get(i);
        }
    }

    public static void main(String[] args)
    {
        double[][] test = { {1, 2, 3, 4, 5, 6, 7, 8, 9},
                                                {6, 2, 7, 2, 9, 6, 8, 10, 5},
                                                {2, 6, 4, 7, 8, 4, 3, 2, 5},
                                                {9, 8, 7, 5, 9, 7, 4, 1, 10},
                                                {5, 3, 6, 8, 2, 7, 3, 7, 2} };

            //make the original array and print it out          
        RemoveRowFrom2dArray m = new RemoveRowFrom2dArray(test);
        System.out.println(m);

            //remove rows with trow number 4 from the 2d array
        m.removeRowsWithRowNumber(4);
        System.out.println(m);
    }
}
0 голосов
/ 14 июня 2011

Двухмерный массив - это не что иное, как массив массивов.Таким образом, мы можем удалить только присвоенное пустое значение:

 arr[4] = new String[n];

Если вы хотите полностью удалить 5-ю строку, то вы можете сделать это, назначив null.Массив должен быть фиксированной длины и гибкости, как в случае ArrayList с дополнительным кодированием над массивами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...