Лучший способ удалить объект из массива в обработке - PullRequest
4 голосов
/ 17 марта 2010

Мне бы очень хотелось, чтобы у Обработки были push и pop методы для работы с массивами, но, так как это не так, мне остается попытаться найти лучший способ удалить объект конкретная позиция в массиве. Я уверен, что для многих это так же просто, как и для многих, но я мог бы помочь с этим, и я не смог ничего понять, просмотрев ссылку Обработка.

Я не думаю, что это имеет значение, но для вашей справки приведен код, который я использовал для первоначального добавления объектов:

Flower[] flowers = new Flower[0];

for (int i=0; i < 20; i++)
{
    Flower fl = new Flower();
    flowers = (Flower[]) expand(flowers, flowers.length + 1);
    flowers[flowers.length - 1] = fl;
}

Ради этого вопроса, давайте предположим, что я хочу удалить объект из позиции 15. Спасибо, ребята.

Ответы [ 3 ]

6 голосов
/ 30 апреля 2010

Вы также можете рассмотреть возможность использования ArrayList , который имеет больше методов, чем простой массив.

Вы можете удалить пятнадцатый элемент, используя myArrayList.remove(14)

0 голосов
/ 23 декабря 2016

Я знаю, что этот вопрос задавался очень давно, но, похоже, многие все еще ищут ответ. Я только что написал это. Я протестировал его несколькими способами, и, похоже, он работает так, как мне хотелось.

var yourArr = [1, 2, 3, 4];                                // use your array here
var removeIndex = 1;                                       // item to get rid of 

var explode = function(array, index) {                     // create the function
    var frontSet = subset(array, 0, index - 1);            // get the front
    var endSet = subset(array, index , array.length - 1);  // get the end
    yourArr = concat(frontSet, endSet);                    // join them
};

explode(yourArr, removeIndex);                             // call it on your array

Это один из способов. Я полагаю, что вы также можете перебрать массив. Что-то вроде ...

var yourArr = [1, 2, 3, 4];
var removeIndex = 2;
var newArr = [];

for(var i = 0; i < yourArr.length; i++) {
    if(i < removeIndex) {
        append(newArr, yourArr[i]);
    } else if(i > removeIndex) {
        append(newArr, yourArr[i]);
    }
}

yourArr = newArr;

... думаю, это тоже должно сработать. Надеюсь, это поможет всем, кому это нужно.

0 голосов
/ 17 марта 2010

Я думаю, что вам лучше всего использовать arraycopy.Вы можете использовать один и тот же массив для src и dest.Что-то вроде следующего (не проверено):

// move the end elements down 1
arraycopy(flowers, 16, flowers, 15, flowers.length-16);
// remove the extra copy of the last element
flowers = shorten(flowers);
...