Dolu bir diziyi [UIFont familyNames]
alfabetik sıraya göre nasıl sıralayabilirim ?
Dolu bir diziyi [UIFont familyNames]
alfabetik sıraya göre nasıl sıralayabilirim ?
Yanıtlar:
En basit yaklaşım, bir sıralama seçici sağlamaktır ( ayrıntılar için Apple'ın belgeleri )
Objective-C
sortedArray = [anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
hızlı
let descriptor: NSSortDescriptor = NSSortDescriptor(key: "YourKey", ascending: true, selector: "localizedCaseInsensitiveCompare:")
let sortedResults: NSArray = temparray.sortedArrayUsingDescriptors([descriptor])
Apple, alfabetik sıralama için çeşitli seçiciler sunar:
compare:
caseInsensitiveCompare:
localizedCompare:
localizedCaseInsensitiveCompare:
localizedStandardCompare:
hızlı
var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
students.sort()
print(students)
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"
Burada verilen diğer yanıtlar @selector(localizedCaseInsensitiveCompare:)
Bu NSString dizisi için harika çalışır, ancak bunu başka bir nesne türüne genişletmek ve bu nesneleri bir 'name' özelliğine göre sıralamak istiyorsanız, bunun yerine bunu yapmalısınız:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
sortedArray=[anArray sortedArrayUsingDescriptors:@[sort]];
Nesneleriniz, bu nesnelerin name özelliğine göre sıralanır.
Sıralamanın büyük / küçük harfe duyarsız olmasını istiyorsanız, açıklayıcıyı bu şekilde ayarlamanız gerekir
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
name
Geçerli bir anahtar olmadığından , dizeleri bu şekilde sıralamaya çalıştığımda bir hata alıyorum . Dizeleri NSSortDescriptor ile alfabetik olarak sıralamak için hangi anahtarı kullanırım?
NSNumericSearch gibi şeyleri kullanmak için bir NSString listesini sıralamanın daha güçlü bir yolu:
NSArray *sortedArrayOfString = [arrayOfString sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];
SortDescriptor ile birlikte, bu gibi bir şey verecek:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];
NSArray *sortedArray = [anArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
Alfabetik sırayla sıralama için aşağıdaki kodu kullanın:
NSArray *unsortedStrings = @[@"Verdana", @"MS San Serif", @"Times New Roman",@"Chalkduster",@"Impact"];
NSArray *sortedStrings =
[unsortedStrings sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"Unsorted Array : %@",unsortedStrings);
NSLog(@"Sorted Array : %@",sortedStrings);
Konsol günlüğü aşağıdadır:
2015-04-02 16:17:50.614 ToDoList[2133:100512] Unsorted Array : (
Verdana,
"MS San Serif",
"Times New Roman",
Chalkduster,
Impact
)
2015-04-02 16:17:50.615 ToDoList[2133:100512] Sorted Array : (
Chalkduster,
Impact,
"MS San Serif",
"Times New Roman",
Verdana
)
Dizeleri sıralamak için bir başka kolay yöntem de NSString description
özelliğini şu şekilde kullanmaktır:
NSSortDescriptor *valueDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES];
arrayOfSortedStrings = [arrayOfNotSortedStrings sortedArrayUsingDescriptors:@[valueDescriptor]];
Bunun zaten birçok amaç için iyi cevapları var, ancak daha spesifik olan benim ekleyeceğim.
İngilizcede, normalde alfabetik yaptığımızda, bir cümlenin başındaki "the" kelimesini görmezden geliriz. Bu yüzden "ABD", "T" yerine "U" altında sipariş edilir.
Bunu sizin için yapar.
Bunları kategorilere koymak muhtemelen en iyisidir.
// Sort an array of NSStrings alphabetically, ignoring the word "the" at the beginning of a string.
-(NSArray*) sortArrayAlphabeticallyIgnoringThes:(NSArray*) unsortedArray {
NSArray * sortedArray = [unsortedArray sortedArrayUsingComparator:^NSComparisonResult(NSString* a, NSString* b) {
//find the strings that will actually be compared for alphabetical ordering
NSString* firstStringToCompare = [self stringByRemovingPrecedingThe:a];
NSString* secondStringToCompare = [self stringByRemovingPrecedingThe:b];
return [firstStringToCompare compare:secondStringToCompare];
}];
return sortedArray;
}
// Remove "the"s, also removes preceding white spaces that are left as a result. Assumes no preceding whitespaces to start with. nb: Trailing white spaces will be deleted too.
-(NSString*) stringByRemovingPrecedingThe:(NSString*) originalString {
NSString* result;
if ([[originalString substringToIndex:3].lowercaseString isEqualToString:@"the"]) {
result = [[originalString substringFromIndex:3] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}
else {
result = originalString;
}
return result;
}
-(IBAction)SegmentbtnCLK:(id)sender
{ [self sortArryofDictionary];
[self.objtable reloadData];}
-(void)sortArryofDictionary
{ NSSortDescriptor *sorter;
switch (sortcontrol.selectedSegmentIndex)
{case 0:
sorter=[[NSSortDescriptor alloc]initWithKey:@"Name" ascending:YES];
break;
case 1:
sorter=[[NSSortDescriptor alloc]initWithKey:@"Age" ascending:YES];
default:
break; }
NSArray *sortdiscriptor=[[NSArray alloc]initWithObjects:sorter, nil];
[arr sortUsingDescriptors:sortdiscriptor];
}