首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Objective-C中NSArray和NSMutableArray的排序

Objective-C中,NSArray和NSMutableArray是用于存储有序数据集合的类。它们之间的主要区别是,NSArray是不可变的,即创建后不能修改,而NSMutableArray是可变的,可以在运行时添加、删除或修改其中的元素。

排序是对数组中的元素按照特定的规则进行重新排列的操作。Objective-C中,可以使用不同的方法对NSArray和NSMutableArray进行排序。

对于NSArray,可以使用以下方法对其进行排序:

  1. sortedArrayUsingComparator: 使用比较器对数组进行排序。比较器是一个block,接受两个元素作为参数,并返回一个NSComparisonResult值,表示两个元素的顺序关系。可以使用这个方法按照自定义的规则对数组进行排序。

例子:

代码语言:txt
复制
NSArray *array = @[@5, @2, @8, @3];
NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    return [obj1 compare:obj2];
}];
  1. sortedArrayWithOptions:usingComparator: 使用选项和比较器对数组进行排序。选项参数指定了排序的规则,比如是否忽略大小写、是否逆序等。比较器参数与上面相同。

例子:

代码语言:txt
复制
NSArray *array = @[@"apple", @"Orange", @"banana"];
NSArray *sortedArray = [array sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(id obj1, id obj2) {
    return [obj1 caseInsensitiveCompare:obj2];
}];

对于NSMutableArray,除了上述的方法,还可以使用以下方法对其进行排序:

  1. sortUsingComparator: 使用比较器对可变数组进行原地排序。与sortedArrayUsingComparator:类似,但是该方法直接在原数组上进行排序,不生成新的数组。

例子:

代码语言:txt
复制
NSMutableArray *array = [@[@5, @2, @8, @3] mutableCopy];
[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    return [obj1 compare:obj2];
}];
  1. sortWithOptions:usingComparator: 使用选项和比较器对可变数组进行排序。与sortedArrayWithOptions:usingComparator:类似,但是该方法直接在原数组上进行排序。

例子:

代码语言:txt
复制
NSMutableArray *array = [@[@"apple", @"Orange", @"banana"] mutableCopy];
[array sortWithOptions:NSSortStable usingComparator:^NSComparisonResult(id obj1, id obj2) {
    return [obj1 caseInsensitiveCompare:obj2];
}];

NSArray和NSMutableArray的排序可以在很多场景中使用,比如对一组数据进行按照某个字段的升序或降序排列,或者根据用户的选择动态调整排序规则等。

腾讯云提供了云计算相关的产品和服务,其中适用于存储和处理数据的产品有:

  1. 对象存储(COS):提供海量、安全、低成本的云存储服务,适用于大规模的数据存储和文件管理。详情请参考腾讯云对象存储官方介绍:https://cloud.tencent.com/product/cos
  2. 云数据库MySQL版(CMQ):提供高可用、可弹性伸缩、安全可靠的MySQL数据库服务,适用于各种规模的应用程序。详情请参考腾讯云云数据库MySQL版官方介绍:https://cloud.tencent.com/product/cdb
  3. 云服务器(CVM):提供高性能、可扩展的云服务器实例,适用于搭建应用程序的后端服务。详情请参考腾讯云云服务器官方介绍:https://cloud.tencent.com/product/cvm

以上是腾讯云推荐的一些与存储和处理数据相关的产品,更多相关产品和服务请参考腾讯云官方文档。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Objective-CNSArray解读

    Objective-CNSArray解读     NSArray数组类是Objective-C语言中常用也是重要一个类,除了开发中常用到一些基础功能,NSArray及其相关类还封装了许多更加强大功能...NSArray属性与方法: //获取数组中元素个数 @property (readonly) NSUInteger count; //通过下标获数组元素 - (ObjectType)objectAtIndex...; //像数组追加一个元素 这个方法会返回一个新数组 - (NSArray *)arrayByAddingObject:(ObjectType)anObject; //像数组追加一组元素.../* 这个属性可以获取一个已经排序数组排序规则 在使用 - (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(ObjectType...:(ObjectType __unsafe_unretained [])objects; NSMutableArray属性与方法: //向数组追加一个元素 - (void)addObject:(ObjectType

    1.3K20

    简谈常用算法

    算法概念 排序算法稳定性:假定在待排序记录序列,存在多个具有相同关键字记录,若经过排序,这些记录相对次序保持不变,即在原序列,ri=rj,且ri在rj之前,而在排序序列,ri仍在rj...:(NSArray *)array{ NSMutableArray *dataArray = [NSMutableArray arrayWithArray:array]; NSInteger...R[k],将它与无序区第1个记录R[1]交换,使R[1..1]R[2..n]分别变为记录个数增加1个新有序区记录个数减少1个新无序区; ... 4、第i趟排序:第i趟排序开始时,当前有序区无序区分别为...该趟排序从当前无序区中选出关键字最小记录 R[k],将它与无序区第1个记录R交换,使R[1..i]R分别变为记录个数增加1个新有序区记录个数减少1个新无序区。...,直到i=j; (3,4步,没找到符合条件值,即3A[j]不小于key,4A[i]不大于key时候改变j、i值,使得j=j-1,i=i+1,直至找到为止。

    52620

    Objective-C集合类

    下面详细介绍Objective-C集合类以及每个集合类用法,学过其他面向对象编程语言小伙伴们看到OC集合类会有种莫名亲切感,理解起来问题不大,可以类比Java集合类去学习...在Objective-C集合类主要包括不可变数组--NSArray,  可变数组--NSMutableArray,   不可变字典--NSDictionary,    可变字典--NSMutableDictionary...NSArray也是OC一个对象,使用NSArray也需要进行实例化,前面的博客在类初始化中提到了便利初始化函数便利构造器,在NSArray也少不了这两样东西我们可以通过NSArray便利初始化函数或者便利构造器进行...NSArray实例化初始化工作。         ...NSMutableArrayNSArray子类,是对NSArray一个扩充。

    1.1K70

    简谈归并排序

    归并排序算法是一种思想挺有意思排序算法。具体内容还是从算法实现思想、时间复杂度、算法稳定性以及算法实现四个方面介绍。...1 算法实现思想 1、第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后序列; 2、第二步:设定两个指针,最初位置分别为两个已经排序序列起始位置; 3、第三步:比较两个指针所指向元素...,选择相对小元素放入到合并空间,并移动指针到下一位置; 4、重复步骤3直到某一指针超出序列尾; 5、将另一序列剩下所有元素直接复制到合并序列尾。...midIndex + 1, endIndex); Merge(sourceArr, tempArr, startIndex, midIndex, endIndex); } } Objective-C...*sourceMutableArray = [NSMutableArray arrayWithArray:sourceArray]; NSMutableArray *tempMutableArray

    63260

    iOSNSSet NSArray区别

    NSSet: ●NSSet , NSMutableSet是无序集合,在内存存储方式是不连续 ●通过anyObject来访问单个元素 ●遍历NSSet每个元素。...通过forin循环来遍历 好处:在搜索一个一个元素时NSSet比NSArray效率高,主要是它用到了一个算法hash 。...应用场景: 比如重用Cell时候,从缓存池中随便获取一个就可以了,无需按照指定顺序来获取 当需要把数据存放到一个集合,然后判断集合是否有某个对象时候 NSArrayNSArray是有序集合...,在内存存储位置是连续 好处:有序访问 应用场景:在绝大多数需要依赖顺序情况下(比如tableView数据源集合,在实际操作要根据下标来获取对象) 通过下标来访问

    74010

    简谈选择排序

    1 算法实现思想 1、n个记录文件直接选择排序可经过n-1趟直接选择排序得到有序结果; 2、初始状态:无序区为R[1..n],有序区为空; 3、第1趟排序: 在无序区R[1..n]中选出关键字最小记录...R[k],将它与无序区第1个记录R[1]交换,使R[1..1]R[2..n]分别变为记录个数增加1个新有序区记录个数减少1个新无序区; 4、第i趟排序:第i趟排序开始时,当前有序区无序区分别为...该趟排序从当前无序区中选出关键字最小记录 R[k],将它与无序区第1个记录R交换,使R[1..i]R分别变为记录个数增加1个新有序区记录个数减少1个新无序区。...2 时间复杂度:min = O(n),max = O(n^2) 3 算法稳定性:不稳定 不稳定原因举例:5 5 3 变为 3 5 5,第一趟排序,第一个5会3位置互换,从而破坏该算法稳定性。...语言实现: - (NSArray *)selectAlgorithm:(NSArray *)array{ NSMutableArray *tempArray = [NSMutableArray

    58250

    oc深坑測试题及其答案

    C、.pl D、.c 19、 下列说法错误是: 答案:(C) A、Objective-C不用”函数调用”,而用互相传递讯息....B、Objective-C一个完整类分为interfaceimplementation两块 C、Objective-C对象使用new分配内存,用delete释放 D、Objective-C协议分为非正式协议和正式协议...D、崩溃信息 21、 OC布尔(BOOL)类型变量值仅仅有: 答案:(B) A、1/0 B、YES/NO C、true/false D、1/-1 22、 Objective-C...方括号“[]”作用,下列说法错误是: 答案:(D) A、用于通知某个对象该做什么 B、方括号内第一项是对象,其余部分是你须要对象运行操作 C、在Objective-C通知对象运行某种操作...aBlock)(NSString * str,NSString *str2) 63、 Objective-C 语言中类实例变量假设仅仅能够被本类其子类訪问,须要下列哪个修饰符: 答案:(C

    44230

    iOS开发之__NSArray0、__NSArrayI、__NSArrayM__NSPlaceholderArray

    NSArray类簇 在《effective objective-c 2.0编写高质量iOS与OS X代码52个有效方法》这样写道:系统框架中有许多类簇,大部分collection类都是类族。...例如NSArray与其可变版本NSMutableArray。这样看来实际上有两个抽象基类,一个用于不可变数组,一个用于可变数组。尽管具备公共接口类有两个,但任然可以合起来算一个类族。...不过,任然有方法判断出某个实例所属类是否位于类族。...//will be hit } 言归正传,下面我们来说说__NSArray0、__NSArrayI、__NSArrayM__NSPlaceholderArray到底是什么鬼。...所以总结一下就是:__NSArrayI是NSArray真正类型 ,__NSArrayM是NSMutableArray真正类型。

    3K80

    OC知识--Foundation框架详尽总结之『数组类』

    框架数组类(NSArray、MutableNSArray)使用做一个详细总结。...NSArray介绍 NSArray是OC数组类,开发建议尽量使用NSArray替代C语言中数组 C语言中虽然也有数组,但在开发过程存在一些弊端 int array[4] = {10, 89...NSArray快速遍历 NSArray *arr = @[@"abc", @"edf", @"hij"]; // OC数组可以使用OC增强for循环来遍历 // 逐个取出arr元素,将取出元素赋值给...block // 每次调用block都会将当前取出元素元素对应索引传递给我们 // obj就是当前取出元素, idx就是当前元素对应索引 [arr enumerateObjectsUsingBlock...NSArray排序 1.NSArray排序 Foundation自带类排序 使用compare方法对数组元素进行排序, 那么数组元素必须是Foundation框架对象, 也就是说不能是自定义对象

    70140

    OC学习13——Foundation框架集合

    NSArray代表有序可重复集合;NSSet代表无序不可重复集合;NSDictionary代表具有映射关系集合。显然,这三类集合分别对应这JavaList、SetMap。   ...一、数组(NSArrayNSMutableArray) 1、NSArray代表元素有序、可重复一个集合,集合每个元素都有其对应顺序索引。...NSArray有一个子类NSMutableArrayNSMutableArray代表集合元素可变集合,因此,程序可以向集合添加新元素,可以删除集合已有的元素。   ...由于NSMutableArrayNSArray子类,所以继承了NSArray所有方法,此外还提供了一系列可以对数组进行修改方法: 添加集合元素方法:这类方法以add开头 删除集合元素方法:...)    NSSetNSMutableSet区别与NSArrayNSMutableArray之间区别是一样

    2.1K80

    iOS开发·必会算法操作:字符串数组排序+模型对象数组排序

    传送门:排序算法演示小DEMO 前面的话 为了给字符串数组排序,除了用C/C++基本办法,iOS开发者更应该学会利用苹果专门为NSArray 排序提供sortedArrayUsingComparator...这个片假字有两套编码,同一个片假字分别有半角全角两种编码。例如:看起来像一样片假字组成句子,全角状态ア字符开头为アいろはアイウエイウエ,半角状态ア字符开头为アいろはアイウエイウエ。...请取出NSString类全部公有 属性 并存放到一个数组,并利用NSArraysortedArrayUsingComparator方法给这个数组进行升序排序操作。...要求:排序过程需要区分字符全角半角状态,其它可按系统默认条件。...请取出NSURL类包括私有 在内全部 成员变量,并存放到一个数组,并利用NSArraysortedArrayUsingComparator方法给这个数组进行升序排序操作。

    2.1K10

    Objective-C继承多态

    Objective-Csuper是指向直接父类指针,而self是指向本身指针,self就相当于javathis指针。...在Objectiv-C几乎所有的类都是继承自NSObject类,NSObject类存在大量功能强大方法。下面对NSObject类各种方法进行试验介绍:         1....= str1"); }     ​    ​Objective-C继承         继承是is-a关系,比如猫咪是一个动物,那么动物是父类,而猫咪是动物子类。...2014-07-30 08:38:12.958 HelloOC[483:303] 我是富二代BILL`s son,我超喜欢飙车 ​Objective-C多态     ​    ​多态简单说就是对于不同对象响应同一个方法时做出不同反应...;     ​多态另一个例子: Animal是父类,子类有Cat Dog,子分别重写了父类eat方法;实例化对象时候可以用下面的方法: 1 2 3 4 5 6 7 Animal *animal

    1.2K80

    OC - 属性关键字所有权修饰符

    这些关键字可以用于属性、方法返回值参数,来指定对象可空性,这样编写代码时候就会智能提示。在 Swift 可以使用!?...而在 Objective-C 则没有这一区分,button即可表示这个对象是optional,也可表示是non-optioanl。...1.ARC 为了避免循环引用而使用,可以让相互引用对象一个使用weak/__weak弱引用修饰,常用于对delegateblock修饰; 2.Interface Builder IBOutlet...(深浅拷贝) @property (copy) NSMutableArray *array; 答:不论赋值过来NSMutableArray还是NSArray对象,进行copy操作后都是NSArray...由于属性被声明为NSMutableArray类型,就不避免会有调用方去调用它添加对象、移除对象等一些方法,此时由于copy结果是NSArray不可变对象,对NSArray对象调用添加对象、移除对象等方法

    1.4K31
    领券