排序的几种方法 oc

NSArray *arr = @[

@"234",

@"123",

@"235",

@"133"

];

NSArray *sortArr = [arr sortedArrayUsingSelector:@selector(compare:)];

NSLog(@"%@",sortArr);//用要排序的原数组调用实例方法,第二个参数,是方法选择,如果数组的元素都是字符串,那么直接用compare:就行

//block(代码块)排序

NSArray *sortArr2 = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

return [obj1 compare:obj2];//根据比较结果,如果结果是1,则交换

}];

NSLog(@"%@",sortArr2);

main函数

Student *s = [[Student alloc] init];
        s.name = @"zhangyu";
        s.age = 20;
       
        Student *s1 = [[Student alloc] init];
       
        s1.name = @"zhangyuzi";
        s1.age = 18;
       
        Student *s2 = [[Student alloc] init];
        s2.age = 21;
        s2.name = @"lirongsheng";
       
        NSArray *arr = @[
                         s,
                         s1,
                         s2
                         ];
       
       
        //自定义对象排序
        NSArray *stuArr = [arr sortedArrayUsingSelector:@selector(compareWithAge:)];
        NSLog(@"%@",stuArr);
    }
    return 0;

}

main.h

#import <Foundation/Foundation.h>

@interface Student : NSObject

@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) int age;

//自定义比较方法(排序时调用),要遵循compare:方法
//格式:-(NSComparisonResult)方法名:(要比较的类名 *)参数名

-(NSComparisonResult)compareWithName:(Student *)stu;

-(NSComparisonResult)compareWithAge:(Student *)stu;

@end

main.m

#import "Student.h"

@implementation Student

-(NSString *)description{
    return [NSString stringWithFormat:@"%@,%d",_name,_age];
}

//比较方法的实现
-(NSComparisonResult)compareWithName:(Student *)stu{
    //对象的比较结果就相当于属性比较结果,self,最开始代表第0个元素,后面再比较时,代表交换后的满足条件的对象
    /*
     0  self a[0];
     1  self a[1]
     2  self a[2]
     */
    //当self放在第一个参数是,代表升序,放在第二个参数时,代表降序    只有result为1的时候才进行交换
    NSComparisonResult result = [stu.name compare: self.name];
   
    return result;
}

-(NSComparisonResult)compareWithAge:(Student *)stu{
    NSComparisonResult result;
   
    if (self.age < stu.age) {
        result = 1;
    }else{
        result = -1;
    }
   
    return  result;
}

@end

时间: 2024-12-25 13:27:23

排序的几种方法 oc的相关文章

ZZUOJ 1199 大小关系(拓扑排序,两种方法_判断入度和dfs回路判断)

1 /* 2 这道题如果按照度为0的节点来判断的时候,将度为0的节点和其相连的节点(度数并减去1) 3 从图中去掉,如果度为0的节点的个数为0个但是图中的节点没有都去掉的 时候那么说明 4 出现了回路!用这种方法必须将重边去除掉! 5 6 所以推荐用dfs方式进行判断!这种方式还是比较直观的! 7 */ 8 #include<iostream> 9 #include<cstring> 10 #include<cstdio> 11 #include<algorith

数据结构:图论:拓扑排序! 两种方法!

拓扑排序:(1)由偏序变成全序的过程!直观的说,偏序指集合中仅有部分成员之间可比较!而全序指集合中全体成员之间均可比较! (2)将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前. 数据结构中进行拓扑排序的方法: 方法一: (1)在有向图中选一个没有前驱的顶点且输出之! (2)从图中删除该顶点和所有以它为尾的弧. (3)重复上述两部,直至全部顶点均已输出,或者当前图中不存在无前驱的顶点为止.后一种情况说明有向图中存在环! 代码: #

有向无环图(DAG)拓扑排序的两种方法

如下图的DAG: 第一种: (1)从AOV网中选择一个没有前驱的顶点并且输出它: (2)从AOV网中删除该顶点,并且上去所有该顶点为尾的弧: (3)重复上述两步,直到全部顶点都被输出,或者AOV网中不存在没有前驱的顶点. 第二种: 使用深度优先搜索(DFS),并标记每一个节点的第一次访问(pre)和最后一次访问时间(post),最后post的逆序就是DAG的拓扑排序,其实也是节点在进行DFS搜索时,出栈的逆序就是拓扑排序. 拓扑序列的结果有: (1) c++,高等数学,离散数学,数据结构,概率论

排序——冒泡排序(三种方法)

冒泡排序的基本思想: 在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换. 关于程序中4中冒泡排序写法的说明: bubble_sort1:基本的冒泡排序的写法. bubble_sort2:基本冒泡排序的不同写法,基本的冒泡排序是每次遍历,每次缩小范围1,这种办法是每次正向和反向遍历,每次缩小范围2,所以两者的比较次数也是一样的. bubble_sort

将单链表排序的两种方法

对单链表排序,通常有两种方法.(PS:考察一个程序员的C语言编程功底,通常看他是否能娴熟的操作链表就知道了.) 方法1:将每一个结点保存到额外的数组中,对数组进行排序,然后根据有序的数组重新构建链表. 方法2:直接对链表进行插入排序,但是实现起来比较复杂一些. 显然,方法1最为简单,因为将链式存储L先转化为顺序存储a[],对顺序存储a[]排序,就避免了较为复杂的链接指针操作.一旦对顺序存储a[]排好序后,根据a[]重新构建一个链表是易如反掌的事情. 1. 单链表的定义如下 typedef str

python list排序的两种方法及实例讲解

对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排序 list.sort(func=None, key=None, reverse=False) Python实例: >>> list = [2,5,8,9,3] >>> list [2,5,8,9,3] >>> list.sort() >>> list [2, 3, 5, 8, 9] 方法2.用序列类型函数sorted(list)进行排

实现对多维数组按照某个键值排序的两种方法(array_multisort和array_sort)

实现对多维数组按照某个键值排序的两种解决方法(array_multisort和array_sort): 第一种:array_multisort()函数对多个数组或多维数组进行排序. //对数组$hotcat按照count键值大小降序进行排序: $hotcat =array( array('1501'=>array('catid'=>'1546','catname'=>'续梦PHP 一级','count'=>'588')), array('1501'=>array('catid

Android HashMap按照键值排序的两种方法

有如下一个 Map 对象: HashMap<Integer, String> map = new HashMap<Integer, String>(); map.put(3,"A"); map.put(2,"B"); map.put(1,"C"); 键值排序第一种方法: Object[] key = map.keySet().toArray(); Arrays.sort(key); for(int i = 0; i<

java自定义容器排序的两种方法

首先说一下排序的返回值的含义.对于参与比较的两个Object,o1和o2,如果函数的返回值为正值,把o1排在o2后面:返回值为负值,把o1排在o2前面.如果返回值是0,按照容器之前的顺序排列.在compareTo中,this相当于o1,传入的Object相当于o2 第一种方法:对于要排序的类实现Comparable接口 package sort; import java.util.ArrayList; import java.util.Collections; import java.util.