SORU
15 Mart 2009, Pazar


Bir NSArray derin kopyalama

Beni derin NSMutableArray kopyalamak için izin veren herhangi bir dahili işlevi var mı?

Bazı insanlar [aMutableArray copyWithZone:nil] derin kopyasını çalışır gibi baktı. Ama denedim ve sığ bir kopya gibi görünüyor.

Şimdi elle for bir döngü ile kopyalama yapıyorum değil mi:

//deep copy a 9*9 mutable array to a passed-in reference array

-deepMuCopy : (NSMutableArray*) array 
    toNewArray : (NSMutableArray*) arrayNew {

    [arrayNew removeAllObjects];//ensure it's clean

    for (int y = 0; y<9; y  ) {
        [arrayNew addObject:[NSMutableArray new]];
        for (int x = 0; x<9; x  ) {
            [[arrayNew objectAtIndex:y] addObject:[NSMutableArray new]];

            NSMutableArray *aDomain = [[array objectAtIndex:y] objectAtIndex:x];
            for (int i = 0; i<[aDomain count]; i  ) {

                //copy object by object
                NSNumber* n = [NSNumber numberWithInt:[[aDomain objectAtIndex:i] intValue]];
                [[[arrayNew objectAtIndex:y] objectAtIndex:x] addObject:n];
            }
        }
    }
}

ama, daha kısa ve öz temiz bir çözüm istiyorum.

CEVAP
15 Mart 2009, Pazar


Apple docs devlet olarak

Eğer bir düzey derin bir kopya sadece gerekiyorsa, açıkça bir çağrı

NSMutableArray *newArray = [[NSMutableArray alloc] initWithArray:oldArray copyItems:YES];

Yukarıdaki kod eski dizi üyeleri sığ kopyasını içeren yeni bir dizi oluşturur.

Derin bir iç içe geçmiş tüm veri yapısına kopyalamak istiyorsanız bağlantılı Elma docs ne aramayı unutmayın< . em^"" . gerçek derin kopyasını - o zaman bu yaklaşım yeterli olmayacaktır - diğer cevapları buraya bakın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ColdfusTion

    ColdfusTion

    3 Aralık 2007
  • Ordetta Price

    Ordetta Pric

    12 EYLÜL 2011
  • TheScorpioTechno

    TheScorpioTe

    15 Aralık 2010