OC 集合排序

数组排序:

//Student类里面只是声明公共NSString *name,NSInteger age变量

//Student.m文件里面重写-(NSString *)description函数

//写  return [NSString stringWithFormat:@"%@,%ld",name,age];

//这条代码是为了后面输出的时候看name和age

Student* stu1=[Student new];

stu1->[email protected]"ggg";

stu1->age=33;

Student* stu2=[Student new];

stu2->[email protected]"dd";

stu2->age=22;

//排序器,第一个参数指明排序的依据,第二个指明排序的升降序

NSSortDescriptor* des1=[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];

NSSortDescriptor* des2=[NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];

//不可变数组NSArray

NSArray *[email protected][stu1,stu2];

//由于NSArray是不可变数组,所以要创建一个新的数组来接收返回值

NSArray *arr2=[arr1 sortedArrayUsingDescriptors:@[des1,des2]];//arr2已经排好序

//可变数组:NSMutableArray

NSMutableArray* marr1=[[NSMutableArray alloc]initWithObjects:stu1,stu2,nil];

//可变数组不用创建新的数组

[marr1 sortUsingDescriptors:@[des1,des2]];

//输出

NSLog(@"%@",arr1);

NSLog(@"%@",arr2);

NSLog(@"%@",marr1);

自定义方法排序:

在Student.h文件添加:-(NSComparisonResult)compare:(Student* )otherStu;

在Student.m文件实现:

-(NSComparisonResult)compare:(Student *)otherStu

{

//假设以名字来排序

NSComparisonResult rst=[name compare:otherStu->name];//原有的name跟传进来的name 比较

NSLog(@"asdfasf");

return rst;

}

在main文件实现

NSMutableArray *marr3=maar2;

[marr3 sortUsingSelector:@selector(compare:)];

NSLog(@"marr3:%@",marr3);

代码块排序:

首先复习下代码块的内容:

//代码块跟C语言里面的函数差不多

//1.声明代码块:

//三要素:返回值、代码块名、参数列表

//没有参数也要写一个()

void (^hello)();//返回值是void,代码块名是hello,没有参数

hello=^{

  NSLog(@"hello");

};//后面记得分号

int (^sum)(int ,int )=^(int a,int b){

  return a+b;

};//有参数的代码块

//调用代码块:

NSLog(@"%d", sum(3,5));//输出8

//下面是利用代码块的排序:

//随便输入一些字母

NSMutableArray* marr=[NSMutableArray arrayWithObjects:@"asdasd",@"sadasfg",@"ryerqwr",nil];

//用系统提供的代码块:

[marr sortUsingComparator:^NSComparisonResult(id obj1,id obj2)

{

NSComparisonResult result=[obj1 compare:obj2];//字符串的比较

return result;

}];

NSLog(@"marr:%@",marr);//这样就排序好了,是不是很简单?

//但这种方发不能排序int类型,下面介绍自定义代码块排序

NSMutableArray* marr2=[NSMutableArray arrayWithObjects:@234,@43534,@5435,nil];

//自定义一个比较的代码块:

//分析参数类型,NSMutableArray里面是对象,所以参数是封装的NSInteger类型,所以参数是NSNumber。

NSComparisonResult (^numComper)(NSNumber*,NSNumber*)=^(NSNumber*num1,NSNumber*num2)

{

return (NSComparisonResult)(num1.intValue - num2.intValue);//比较的时候需要解除封装,返回值不同所以需要强转  

};

[marr2 sortUsingComparator:numComper];

NSLog(@"marr2=%@",marr2);

时间: 2024-10-28 08:50:25

OC 集合排序的相关文章

Java-集合--Java集合排序

Java集合排序 前几天在工作的当中遇到对List<Map<String,String>>这样的数据结构按照Map<String,String>中的某个字段排序, 具体的实现为: <span style="font-size:18px;">public void sortList(List<Map<String, String>> list, final String field) { Collections.so

Java集合排序

java集合排序 如何给Java中List集合排序呢?前端时间在工作中遇到类似于给这样的结构排序List<Map<String,String>>>按照其中Map中的某个key值排序呢? 集合产生如下: <span style="font-size:18px;">public void sortList(){ List<List<Map<String,String>>> list = new ArrayList

Java集合排序及java集合类详解--(Collection, List, Set, Map)

1         集合框架 1.1         集合框架概述 1.1.1         容器简介 到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一些有意义的事情. 举例来说,假设要存储许多雇员,不同的雇员的区别仅在于雇员的身份证号.我们可以通过身份证号来顺序存储每个雇员,但是在内存中实现呢?是不是要准备足够的内存来存储1000个雇员,然后再将这些雇员逐一插入?如果已经插入了500条记录,这时需要插入一个身份证号较低的新雇员,该怎么办呢?是在内

java集合排序方法sort的使用

转自  http://blog.csdn.net/a1165117473/article/details/6965652 /** To change this template, choose Tools | Templates* and open the template in the editor.*/ package com.city.test; import java.util.Arrays;import java.util.Comparator;/**** @author LiuB*/

对集合排序的三种方式

对集合排序,可能最先想到的是使用OrderBy方法. class Program { static void Main(string[] args) { IEnumerable<Student> result = GetStudents().OrderBy(r => r.Score); foreach (var item in result) { Console.WriteLine(item.Name + "--" + item.Score); } Console.R

最简单的List集合排序方法

将数组按照一定的规则排序最简单的方法就是借助Arrays类的sort方法,那么要实现List集合排序的排序最简单的方式又是什么呢?当然是借助Collections类的sort方法,下面以一个例子来说明如何使用该方法实现List集合的排序: 代码一: package com.ghj.packageofvo; public class User { private String name; //姓名 private String birthday;//出生日期 public User(String

java 集合排序

http://www.cnblogs.com/standcloud/articles/2601914.html java 集合排序 Java API针对集合类型排序提供了两种支持:java.util.Collections.sort(java.util.List)java.util.Collections.sort(java.util.List, java.util.Comparator) 第一个方法要求所排序的元素类必须实现java.lang.Comparable接口.第二个方法要求实现一个j

Java 实现Map集合排序功能

第一步:Map中新增sort临时键 // 初始化Map集合 List<Map<String, String>> columns = new ArrayList<Map<String, String>>(); Map<String, String> c1 = new HashMap<String,String>(); c1.put("sort", "8"); c1.put("title&

ArrayList集合排序

using System;using System.Collections;using System.Collections.Generic;using System.Text; namespace ArrayList集合排序{    class Program    {        struct Player        {            public string name;            public int mark;                   }