أفضل طريقة لإزالة كائن من مصفوفة في المعالجة

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

  •  20-09-2019
  •  | 
  •  

سؤال

أنا حقا أتمنى لو كان المعالجة يدفع و البوب طرق للعمل مع المصفوفات، ولكن نظرًا لعدم وجود ذلك، فأنا أحاول اكتشاف أفضل طريقة لإزالة كائن في موضع معين في المصفوفة.أنا متأكد من أن هذا أمر أساسي بالنسبة للعديد من الأشخاص، ولكن يمكنني الاستفادة من بعض المساعدة فيه، ولم أتمكن من اكتشاف الكثير من خلال تصفح مرجع المعالجة.

لا أعتقد أن الأمر مهم، ولكن كمرجع لك، إليك الكود الذي استخدمته لإضافة الكائنات في البداية:

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