Как сортировать NSArray, содержащий строки в алфавитном порядке, но я хочу, чтобы арабские строки имеют приоритет, чем английский и поставить на вершине отсортированного массиваСортировка NSArray из NSString алфавитный арабский первый
0
A
ответ
0
Вы можете сделать его работу с помощью Для сравнения: параметры: диапазон: Язык: и указать арабский локаль явно, как это:
NSArray *strings=[NSArray arrayWithObjects:@"as", @"ol", @"st", nil]; // also contain
NSLocale *locale=[[NSLocale alloc] initWithLocaleIdentifier:@"ar_BH"];
NSArray *sorted=[strings sortedArrayUsingComparator:^(NSString *first, NSString *second) {
return [second compare:first
options:0
range:NSMakeRange(0, [second length])
locale:locale];
}];
for (NSString *s in sorted) { NSLog(@"%@", s); }
0
Я сделал это так же :)
-(NSArray*)arabicFirstSortedArray:(NSArray*)arr {
static NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch | NSNumericSearch |
NSWidthInsensitiveSearch | NSForcedOrderingSearch;
NSLocale *locale = [NSLocale localeWithLocaleIdentifier:@"ar"];
NSArray *sortedArray = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSRange string1Range = NSMakeRange(0, [obj1 length]);
return [obj1 compare:obj2 options:comparisonOptions range:string1Range locale:locale];
}];
return sortedArray;
}
Это другой способ сделать аравийскую нить сверху, но оставить сортировку, как это
-(NSArray*)arabicFirstSortedArray:(NSArray*)arr {
NSArray *sortedArray = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
BOOL isFirstArabic = [self isArabicString:obj1];
BOOL isSecondArabic = [self isArabicString:obj2];
if (isFirstArabic == isSecondArabic) {
return NSOrderedSame;
}
else if(isFirstArabic){
return NSOrderedAscending;
}
else{
return NSOrderedDescending;
}
}];
return sortedArray;
}
-(BOOL)isArabicString:(NSString*)str {
NSString *isoLangCode = (__bridge_transfer NSString*)CFStringTokenizerCopyBestStringLanguage((__bridge CFStringRef)str, CFRangeMake(0, str.length));
if([isoLangCode isEqualToString:@"ar"]){
return YES;
}
else{
return NO;
}
}
Если мой подход поможет вам затем пометить мой ответ как принятый. –