Bir NSArray'ım var ve onu iki eşit parçaya bölmek istiyorum (eğer tek bir sayı varsa "sonra" yeni diziye ekle ") - bunu konuşmak için" ortada "bölmek istiyorum.NSArray iki eşit parçaya nasıl bölülür?
Aşağıdaki kod istediğim tam olarak ne yapar, ancak daha iyi bir yolu ?: leftArray ve rightArray yapıldıktan sonra
// NOTE: `NSArray testableArray` is an NSArray of objects from a class defined elsewhere;
NSMutableArray *leftArray = [[NSMutableArray alloc] init];
NSMutableArray *rightArray = [[NSMutableArray alloc] init];
for (int i=0; i < [testableArray count]; i=i+1) {
if (i < [testableArray count]/2) {
[leftArray addObject:[testableArray objectAtIndex:i]];
}
else {
[rightArray addObject:[testableArray objectAtIndex:i]];
}
}
, onları değişmeyecek yoktur, bu yüzden "kesilebilir olması gerekmez ". Ben ObjectsAtIndexes yöntemiyle ya da bazı hızlı numaralandırma yöntemi ile yukarıdaki kodu gerçekleştirmek için bir yol olabilir düşünüyorum ?, ama şu kod işe (ya da diğer varyasyonlar) alamazsınız: eğer
NSArray *leftArray = [[NSArray alloc] initWithObjects:[testableArray objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(????, ????)]]];
NSArray *rightArray = [[NSArray alloc] initWithObjects:[testableArray objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(????, ????)]]];
bilen var mı Benimle doğru yönde mi gidiyorum, yoksa doğru yöne mi işaret etmeliyim?
Teşekkürler!
Alex, hızlı yanıtlarınız için teşekkürler! İkinci çözümünüz çok daha iyi. Yukarıdaki örnekte de açıkça belirttiğiniz NSRange'ı uygulamaktan çok fazla vazgeçtim galiba! –
Burada bir hata var. +1'e gerek yok. Örnek: 6 öğeden oluşan bir dizi. ilk NSRange {0, 3} olmalıdır, ikinci NSRange {3, 3} olmalıdır. Durumunuzda bir istisna elde edersiniz çünkü ikinci aralık {4, 3} sınırları dışına çıkar. –
Teşekkürler, Stas. Bu kodu tamir ettim. –