gpt4 book ai didi

iphone - 对 NSStrings 的 NSArray 进行排序,就像在 iphone 上排序的地址簿一样

转载 作者:太空狗 更新时间:2023-10-30 03:28:46 25 4
gpt4 key购买 nike

我有一个字符串数组(名称)

我想像 iphone 上的地址簿一样对它们进行排序

  • 例如:éli -> E 下
  • 例如:àli -> A 下
  • 例如:4li -> #下

有什么建议吗?

最佳答案

您需要对字符串执行不区分变音符号的比较。 NSString有一个 compare:options: 方法,带有 NSDiacriticInsensitiveSearch 选项。

NSArray *array = [NSArray arrayWithObjects:@"éli", @"bob", @"earl", @"allen", @"àli", @"aaron", nil];

NSArray *sorted = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [(NSString*)obj1 compare:obj2 options:NSDiacriticInsensitiveSearch|NSCaseInsensitiveSearch];
}];

编辑:

这是一个完整的示例,它将根据不区分变音符号的第一个字符来划分结果。我放入了字典,因此您需要自己跟踪排序的键才能正确显示。

NSArray *array = [NSArray arrayWithObjects:@"éli", @"bob", @"earl", @"allen", @"àli", nil];

NSArray *sorted = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [(NSString*)obj1 compare:obj2 options:NSDiacriticInsensitiveSearch|NSCaseInsensitiveSearch];
}];

NSMutableDictionary *sectioned = [NSMutableDictionary dictionary];
NSString *firstChar = nil;

for(NSString *str in sorted)
{
//Ignore empty strings
if(![str length])continue;

NSMutableArray *names = nil;

//Compare the first character using diacritic insensitive search
if([str compare:firstChar options:NSDiacriticInsensitiveSearch|NSCaseInsensitiveSearch range:NSMakeRange(0, 1)] == NSOrderedSame)
{
names = [sectioned objectForKey:firstChar];
}
else
{
//decomposedStringWithCanonicalMapping is where the magic happens
//(it removes the accent mark)
firstChar = [[str decomposedStringWithCanonicalMapping] substringToIndex:1];
names = [NSMutableArray array];
[sectioned setObject:names forKey:firstChar];
}

[names addObject:str];
}

NSLog(@"sorted: %@", sorted);
//This is sectioned like the address app
NSLog(@"sectioned: %@", sectioned);

关于iphone - 对 NSStrings 的 NSArray 进行排序,就像在 iphone 上排序的地址簿一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6845446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com