Sadece bir diziyi sıralıyorsanız NSNumbers
, bunları 1 çağrı ile sıralayabilirsiniz:
[arrayToSort sortUsingSelector: @selector(compare:)];
Bu, dizideki ( NSNumber
nesneler) nesneler karşılaştır yöntemini uyguladığı için çalışır. Aynı şeyi NSString
nesneler için, hatta bir karşılaştırma yöntemi uygulayan bir dizi özel veri nesnesi için de yapabilirsiniz.
Karşılaştırma bloklarını kullanan bazı örnek kodlar: Her sözlükte "sort_key" anahtarında bir sayı bulunan bir dizi sözlük sıralar.
#define SORT_KEY @\"sort_key\"
[anArray sortUsingComparator:
^(id obj1, id obj2)
{
NSInteger value1 = [[obj1 objectForKey: SORT_KEY] intValue];
NSInteger value2 = [[obj2 objectForKey: SORT_KEY] intValue];
if (value1 > value2)
{
return (NSComparisonResult)NSOrderedDescending;
}
if (value1 < value2)
{
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
Yukarıdaki kod, her bir sıralama anahtarı için bir tamsayı değeri elde etme ve bunları nasıl yapacağınızı gösteren bir örnek olarak karşılaştırma işinden geçer. Yana NSNumber
nesneleri karşılaştırmak yöntemi uygulamak, çok daha basit yazılabilirdi:
#define SORT_KEY @\"sort_key\"
[anArray sortUsingComparator:
^(id obj1, id obj2)
{
NSNumber* key1 = [obj1 objectForKey: SORT_KEY];
NSNumber* key2 = [obj2 objectForKey: SORT_KEY];
return [key1 compare: key2];
}];
veya karşılaştırıcının gövdesi 1 hatta kadar damıtılabilir:
return [[obj1 objectForKey: SORT_KEY] compare: [obj2 objectForKey: SORT_KEY]];
Basit ifadeleri ve çok sayıda geçici değişkeni tercih etme eğilimindeyim çünkü kodun okunması daha kolay ve hata ayıklaması daha kolay. Derleyici zaten geçici değişkenleri optimize eder, bu nedenle hepsi bir arada aygıtın bir avantajı yoktur.