Лучший способ удалить объект из массива в обработке

StackOverflow https://stackoverflow.com/questions/2459780

  •  20-09-2019
  •  | 
  •  

Вопрос

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

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

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.Спасибо ребята.

Это было полезно?

Решение

Я думаю, что лучше всего использовать 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);

Другие советы

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

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

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

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;

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top