Foundation框架中的数组排序

看官们,我们在前面章回中介绍了Foundation框架中的静态数组和动态数组,本章回中将介绍数组排序.


数组排序就是把数组中的元素按照升序或者降序的顺序进行排列,这样使的数组中的所有元素井然有序,在实际的项目中经常使用有序的数组。NSArray提供了相关的方法对数组中的元素进行排序,接下来我们依次介绍这些方法。

sortedArrayUsingSelector:          //使用元素自带的方法对元素进行排序
sortedArrayUsingFunction:context:  //使用自定义的方法对元素进行排序
sortedArrayUsingComparator:        //使用某个代码块对元素进行排序


接下来我们通过具体的代码来演示如何使用这些方法给数组排序:

#import<Foundation/Foundation.h>

NSInteger diySort(id a, id b, void *context)
{
	int ia = [a intValue];
	int ib = [b intValue];
	NSInteger result = NSOrderedSame;

	if(ia > ib)
		result = NSOrderedDescending;

	if(ia < ib)
		result = NSOrderedAscending;

	return result;
}

int main()
{
	NSArray *array1 = [NSArray arrayWithObjects:@"1",@"5",@"3",nil];
	NSArray *array2 = [NSArray arrayWithObjects:@"bb",@"aa",@"cc",nil];
	NSMutableArray *array3 = [NSMutableArray arrayWithObjects:@"2",@"8",@"6",nil];

	//使用元素自己的方法来排序
	NSArray *array4 = [array2 sortedArrayUsingSelector:@selector(compare:)];
	NSLog(@"after sorted: %@ , %@",array2,array4);

	//使用自己定义的方法来排序,第一个参数是方法名,第二个参数是方法的中参数
	array4 = [array1 sortedArrayUsingFunction:diySort context:nil];
	NSLog(@"after sorted: %@ , %@",array1,array4);

	//排序不影响动态数组,返回一个新的数组
	array4 = [array3 sortedArrayUsingFunction:diySort context:nil];
	NSLog(@"after sorted: %@ , %@",array3,array4);
	

	//使用某个代码块来排序
	array4 = [array1 sortedArrayUsingComparator:^(id a,id b)
	{
		int ia = [a intValue];
		int ib = [b intValue];
		NSInteger result = NSOrderedSame;

		if(ia > ib)
			result = NSOrderedDescending;

		if(ia < ib)
			result = NSOrderedAscending;

		return result;
	}];
	NSLog(@"after sorted: %@ , %@",array1,array4);

	return 0;
}



在代码中我们添加了相关的注释,以方便大家理解代码,不过还有一些注意的地方需要做说明:

  • 1.不论是动态数组还是静态数组,所有的排序方法都不会修改原来的数组,同时它会返回一个新的数组;
  • 2.如果元素有自己的比较或者排序方法优先使用元素自带的比较方法,比如NSString类的compare方法;
  • 3.使用自定义的方法或者代码块给元素排序时需要返回枚举常量,不然无法当作排序方法来使用;

我们在程序中提供的数组都只包含了简单的数组和数字,而且数量也比较少,大家很容易就能想到排序结果,因此我们就不列出程序的运行结果了,大家可以自己动手去编译运行程序。

最后我们对本章回的内容做一个总结:

  • 1.数组排序本质上是对数组中的元素进行排序;
  • 2.数组排序优先使用元素自带的方法,如果没有就自定义排序方法;
  • 3.数组提供的排序方法不会修改原来的数组,只会返回一个新的数组;
  • 4.自定义排序方法时需要返回特定的枚举枚常量用来指定是升序还是降序;

看官们,本章回的内容就介绍到这里,欲知后事如何且听下回分解!

Guess you like

Origin blog.csdn.net/talk_8/article/details/119257072
Recommended