SORU
21 EYLÜL 2008, Pazar


En iyi yineleme sırasında NSMutableArray kaldırmak için?

Kakao, eğer bir NSMutableArray döngü ve belirli bir kriterlere uygun birden fazla nesneleri kaldırmak istiyorum, bu döngü her zaman yeniden olmadan bunu yapmak için en iyi yolu nedir ben bir nesne kaldırmak?

Teşekkürler

Edit: Sadece netleştirmek için - ben en iyi yolu, örneğin, bir el ile dizin güncelleme daha zarif arıyordum. C örneğin yapabileceğim;

iterator it = someList.begin();

while (it != someList.end())
{
    if (shouldRemove(it))   
        it = someList.erase(it);
}

CEVAP
21 EYLÜL 2008, Pazar


Açıklık getirmek için öğeleri silmek için topluyorum ilk bir döngü yapmak istiyorum. Sonra ben onları silin. İşte bir örnek Objective-C 2.0 sözdizimini kullanarak:

NSMutableArray *discardedItems = [NSMutableArray array];
SomeObjectClass *item;

for (item in originalArrayOfItems) {
    if ([item shouldBeDiscarded])
        [discardedItems addObject:item];
}

[originalArrayOfItems removeObjectsInArray:discardedItems];

O zaman endeksleri doğru, ya da diğer küçük defter tutma ayrıntıları güncellenmekte olup olmadığı konusunda bir soru var.

Düzenlenmiş eklemek için:

Ters formülasyonu daha hızlı olmalısınız diğer cevaplar yazılmış. Eğer yani dizi üzerinden yineleme ve nesnelerin yeni bir dizi tutmak için oluşturmak, nesneleri atmak yerine. Bu gerçek ne yeni bir dizi tahsis ve eskisini atma, bellek ve işleme maliyeti hakkında? olsa da) olabilir ama eğer büyük olmayabilir daha hızlı olduğuna bile bir anlaşma NSArrays "normal" diziler. gibi davranmazlar çünkü saf bir uygulama olur gibi Konuşurlar, konuşurlar ama farklı bir yürüyüş mesafesindedir. İyi bir analizi buraya bakın:

http://ridiculousfish.com/blog/archives/2005/12/23/array/

Ters formülasyonu daha hızlı olabilir, ama asla yukarıdaki formülasyonu her zaman benim ihtiyaçları için yeterince hızlı oldu, çünkü ister bakım için gerekli.

Beni evde mesajı net ne olursa olsun kullanmaktır. Gerekli ise Optimize. Ben kullanıyorum bu yüzden şahsen yukarıdaki formülasyon açık bulmak. Ama eğer ters formülasyonu sana net olduğunu, bunun için gitmek.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Darren Kitchen

    Darren Kitch

    3 EKİM 2011
  • FamilyFeud

    FamilyFeud

    22 AĞUSTOS 2006
  • HowcastTechGadgets

    HowcastTechG

    22 EYLÜL 2010