ios 数组中的字典排序_iOS 中文排序、数组、字典排序

本文介绍了一种简单有效的iOS应用中中文排序方法,利用苹果提供的localizedCompare:方法进行数组内中文字符串排序,同时提供了处理复杂数据结构如字典数组的排序示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组内中文排序

看够了复杂的中文排序封装代码,让我们来点小清新,其实苹果不但为我们提供好了排序方法,并且带有多音字区分,贴心到想哭有木有?

845839142L

0x6b,0x16,0x0e,0x0f,0xfa,0x5b,0xb3,0xf1,0x59,0x52,0xe1,0x4f,0x43,0x9d,0x9a,0x3e,0x3a,0x99,0x83,0x8a,0x1f,0xf2,0x2b,0x0e,0xdc,0x6a,0x36,0x6d,0x37,0xe4,0xe9,0x15

NSArray *dataArr = @[@"苹果",@"重庆",@"安阳",@"重点",@"加班",@"沈阳", @"iOS",@"Young"];

NSArray *rankArr = [dataArr sortedArrayUsingSelector:@selector(localizedCompare:)];

NSLog(@"\n中文升序:%@", [rankArr my_description]);

中文升序:(

"安阳",

"重庆",

"加班",

"苹果",

"沈阳",

"天气",

"重点",

iOS,

Young

)

也许您会问my_description方法是什么鬼,因为中文在控制台输出为Unicode,不够直观,所以加了个为数组加了个类扩展方法,简单有效,不敢私藏,仅供参考:

// .h 声明

#import

@interface NSArray (Unicode)

- (NSString*)my_description;

@end

// .m 实现

#import "NSArray+Unicode.h"

@implementation NSArray (Unicode)

- (NSString*)my_description {

NSString *desc = [self description];

desc = [NSString stringWithCString:[desc cStringUsingEncoding:NSUTF8StringEncoding]

encoding:NSNonLossyASCIIStringEncoding];

return desc;

}

@end

然而后台小伙伴怎么会给我们如此简单的数据,经常是数组内套字典,然后我们转为模型使用才是常规操作。Talk is cheap. Show me the code.

NSArray *dictArr = @[@{@"name": @"苹果", @"word" : @"Apple", @"number" : @(520)},

@{@"name": @"重庆", @"word" : @"Banana", @"number" : @(1314)},

@{@"name": @"安阳", @"word" : @"China", @"number" : @(7)},

@{@"name": @"加班", @"word" : @"996.ICU", @"number" : @(119)},

@{@"name": @"重点", @"word" : @"Do", @"number" : @(54)},

@{@"name": @"天气", @"word" : @"YOU", @"number" : @(120)},

@{@"name": @"沈阳", @"word" : @"Love", @"number" : @(114)},

@{@"name": @"iOS", @"word" : @"Me", @"number" : @(211)},

@{@"name": @"Young", @"word" : @"YES", @"number" : @(521)}];

// 中文排序

NSSortDescriptor *nameSortDesc = [NSSortDescriptor sortDescriptorWithKey:@"name"

ascending:YES

selector:@selector(localizedCompare:)];

NSArray *nameRankArr = [dictArr sortedArrayUsingDescriptors:@[nameSortDesc]];

NSLog(@"\n 按name排序升序: %@", [nameRankArr my_description]);

// 英文、数字排序

NSSortDescriptor *numSortDesc = [NSSortDescriptor sortDescriptorWithKey:@"number"

ascending:YES];

NSArray *numRankArr = [dictArr sortedArrayUsingDescriptors:@[numSortDesc]];

NSLog(@"\n 按number升序:%@", [numRankArr my_description]);

按name排序升序: (

{

name = "安阳";

number = 7;

word = China;

},

{

name = "重庆";

number = 1314;

word = Banana;

},

{

name = "加班";

number = 119;

word = "996.ICU";

},

{

name = "苹果";

number = 520;

word = Apple;

},

{

name = "沈阳";

number = 114;

word = Love;

},

{

name = "天气";

number = 120;

word = YOU;

},

{

name = "重点";

number = 54;

word = Do;

},

{

name = iOS;

number = 211;

word = Me;

},

{

name = Young;

number = 521;

word = YES;

}

)

打印有点长,按number升序的输出我就不贴出来了,结果没毛病的,请保留一点人与人之间的信任,有问题欢迎留言😏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值