博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NSArray排序方法讲解
阅读量:6208 次
发布时间:2019-06-21

本文共 4067 字,大约阅读时间需要 13 分钟。

NSArray排序方法讲解

给数组排序有着多种方式

最麻烦的是sortedArrayUsingSelector:,其次是sortedArrayUsingDescriptors:,最容易使用的就是sortedArrayUsingComparator:

从最容易使用的开始吧:

// 原始数组    NSArray *array = @[@"b", @"a", @"x", @"o", @"g", @"o"];        // 排序数组    NSArray *sort = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {        NSString *str1 = obj1;        NSString *str2 = obj2;        return [str1 compare:str2];    }];        // 打印排序数组    [sort enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {        NSLog(@"%@", obj);    }];

这么一行就解决了,实在是太容易了.

要对什么对象排序就用相应的对象接收就行了:)

是不是简单过头了呢.

请记住,用block排序是最简单的方式!

下面来试试sortedArrayUsingDescriptors:这个方法.

sortedArrayUsingDescriptors:一般用来给Model进行排序,block也能对Model进行排序.先给出Model的定义(看教程不要太懒,自己敲代码吧)

以下是排序的代码:

////  AppDelegate.m//  Sort////  http://www.cnblogs.com/YouXianMing/////  Copyright (c) 2014年 Y.X. All rights reserved.//#import "AppDelegate.h"#import "Model.h"@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];    [self sort];        self.window.backgroundColor = [UIColor whiteColor];    [self.window makeKeyAndVisible];    return YES;}- (void)sort{    // 原始数组    NSArray *array = @[[Model name:@"YouXianMing" age:@26 height:171],                       [Model name:@"XiaoQiu"     age:@27 height:170],                       [Model name:@"HaoQuShi"    age:@28 height:172],                       [Model name:@"JunGang"     age:@24 height:171],                       [Model name:@"KongMing"    age:@30 height:175],                       [Model name:@"GaoFuShuai"  age:@22 height:180]];        // 排序描述信息    NSSortDescriptor *sortDescriptor  = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];    NSArray          *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];    NSArray          *sortedArray     = [array sortedArrayUsingDescriptors:sortDescriptors];        // 打印排序信息    [sortedArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {        Model *tmp = obj;        NSLog(@"%@", tmp.name);    }];}@end

看下图,其实呢,NSSortDescriptor只是一个获取keyPath的工具,他能根据keyPath进行排序而已,仅此而已:)

看一下打印信息:

2014-07-01 09:09:43.563 Sort[86442:60b] GaoFuShuai

2014-07-01 09:09:43.565 Sort[86442:60b] HaoQuShi
2014-07-01 09:09:43.565 Sort[86442:60b] JunGang
2014-07-01 09:09:43.566 Sort[86442:60b] KongMing
2014-07-01 09:09:43.566 Sort[86442:60b] XiaoQiu
2014-07-01 09:09:43.567 Sort[86442:60b] YouXianMing

很easy吧.

这种东西还是封装成类目比较好的样子.

使用:

////  AppDelegate.m//  Sort////  http://www.cnblogs.com/YouXianMing/////  Copyright (c) 2014年 Y.X. All rights reserved.//#import "AppDelegate.h"#import "Model.h"#import "NSArray+YXSort.h"@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];    [self sort];        self.window.backgroundColor = [UIColor whiteColor];    [self.window makeKeyAndVisible];    return YES;}- (void)sort{    // 原始数组    NSArray *array = @[[Model name:@"YouXianMing" age:@26 height:171],                       [Model name:@"XiaoQiu"     age:@27 height:170],                       [Model name:@"HaoQuShi"    age:@28 height:172],                       [Model name:@"JunGang"     age:@24 height:171],                       [Model name:@"KongMing"    age:@30 height:175],                       [Model name:@"GaoFuShuai"  age:@22 height:180]];        // 排序    NSArray *sortedArray = [array sortedWithKeyPath:@"name" ascending:YES];        // 打印排序信息    [sortedArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {        Model *tmp = obj;        NSLog(@"%@", tmp.name);    }];}@end

一句话就能实现排序,多简单:),开发就得隐藏不必要的繁文缛节,减少不必要的干扰才是正道.

第三种方法sortedArrayUsingSelector:,也许是你最常用的方法,这个我就不讲了,我觉得太麻烦了,还得另外写一个比较的方法......

 

 

总结:

==本人倾向于这么用==

1. 优先用block排序

2. 用NSSortDescriptor的keyPath排序

3. 再不济请用sortedArrayUsingSelector:方法排序

 

附录:

用block对Model排序一样非常简单直白暴力,只需用Model接收对象就可以了.

 

你可能感兴趣的文章
Lottie 站在巨人的肩膀上实现 Android 酷炫动画效果
查看>>
Linux_异常_08_本机无法访问虚拟机web等工程
查看>>
您的网卡配置暂不支持1000M宽带说明
查看>>
“陪护机器人”研报:距离真正“陪护”还差那么一点
查看>>
深入框架本源系列 —— Virtual Dom
查看>>
mongodb分布式集群搭建手记
查看>>
您有一个上云锦囊尚未领取!
查看>>
Java Web的web.xml文件作用及基本配置(转)
查看>>
区块链101:区块链的应用和用例是什么?
查看>>
马约拉纳费米子:推动量子计算的“天使粒子”
查看>>
瑞立视:厚积薄发且具有“工匠精神”的中国品牌
查看>>
git与svn的区别 ?Git 与 SVN那个更好?
查看>>
使用ActionTrail Python SDK
查看>>
数据显示,中国近一半的独角兽企业由“BATJ”四巨头投资
查看>>
log日志轮转--logrotate
查看>>
安装输入发
查看>>
用户配置相关文件
查看>>
老王学linux-ftp
查看>>
kvm vnc的使用,鼠标漂移等
查看>>
linux中fcntl()、lockf、flock的区别
查看>>