我有一个数组。该数组具有两种不同语言的位置(字符串)名称。即阿拉伯语和英语。我希望以阿拉伯语单词首先出现,然后是英语单词排序数组。
此外,我有一个函数,它返回一个布尔值True / False,并告诉我该字符串是否是英文。该数组只包含2个语言。
谢谢大家。由于时间紧迫所以我只是按照旧学校的方法。使用2 For循环并根据语言将数据从源数组复制到新数组。 将在此处查看用户提供的一些有用信息。谢谢大家。
答案 0 :(得分:0)
你应该这样试试
NSSortDescriptor *sortDescriptor1 = [NSSortDescriptor sortDescriptorWithKey:@"prop" ascending:YES];
NSSortDescriptor *sortDescriptor2 = [NSSortDescriptor
sortDescriptorWithKey:@"prop"
ascending:YES
comparator:^NSComparisonResult(id _Nonnull obj1,
id _Nonnull obj2){
if( [self isArabic:obj2] && [self isArabic:obj1])
return NSOrderedSame;
if ([self isArabic:obj2])
return NSOrderedAscending;
else if ([self isArabic:obj1])
return NSOrderedDescending;
else
return NSOrderedSame;
}];
[self.arrList sortedArrayUsingDescriptors:@[sortDescriptor1, sortDescriptor2]];
答案 1 :(得分:0)
所以你有那个“功能”。我假设这是一个-isEnglish
类别的方法(我将其命名为NSString
)。 (如果不是,那就去吧。)
然后你有两种方法:
一个。嵌套排序描述符
你可以用两个排序描述符来做到这一点:
NSSortDescriptor *languageSorter = [[NSSortDescriptor alloc] initWithKey:@"isEnglish" ascending:YES];
NSSortDescriptor *wordSorter = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES];
NSArray *sortedWords = [words sortedArrayUsingSortDescriptors:@[languageSorter, wordSorter];
B中。自定义排序
您可以使用比较器设置自己的排序:
NSArray *sortedWords = [words sortedArrayUsingComparator:
^(id word1, id word2)
{
// 1. english, 2. arabic
if( [word1 isEnglish] && ![word2 isEnglish] )
{
return (NSComparisonResult)NSOrderedDescending;
}
// 1. arabic, 2. english
else if ( ![word1 isEnglish] && [word2 isEnglish] )
{
return (NSComparisonResult)NSOrderedAscending;
}
// Both words in the same language, do your "usual" comparision
…
}
另一种方法是使用NSPredicate
和-filteredArrayUsingPredicate:
(`NSArray')将数组分成两个独立的数组。