Лучший способ удалить объект из массива в обработке
-
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;
...думаю, это тоже должно сработать.Надеюсь, это поможет всем, кто в этом нуждается.