美文网首页
数组排序

数组排序

作者: wpf_register | 来源:发表于2020-06-08 10:31 被阅读0次

首先明确两个定义

1.定义NSComparisonResult类型返回值
typedef NS_ENUM(NSInteger, NSComparisonResult)
{
    //代表升续
    NSOrderedAscending = -1L,    
    //代表相同
    NSOrderedSame,
    //代表降序                      
    NSOrderedDescending        
};

2.定义NSComparator block类型返回值
 typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);
block进行排序(推荐使用)
NSMutableArray *arr = [NSMutableArray array];

[arr addObject:@2];
[arr addObject:@1];
[arr addObject:@5];
[arr addObject:@3];
[arr addObject:@4];

//此方法是直接对arr排序,若要生成新数组排序则调用sortedArrayUsingComparator:
//若明确知道数组中元素的类型,也可以直接将id改为某确定类型
[arr sortUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2)
{
    //此处的规则含义为:若前一元素比后一元素小,则返回降序(即后一元素在前,为从大到小排列)
    if ([obj1 integerValue] < [obj2 integerValue])
    {
        return NSOrderedDescending;
    }
    else
    {
        return NSOrderedAscending;
    }
}];

排序结果为 5,4,3,2,1

NSString类比较方法:
pare:区分大小写
caseInsensitiveCompare: 不区分大小写
localizedStandardCompare:根据当前语言环境的语言规则进行排序(语言环境可能会根据大小写,变音符号等等的顺序而发生改变)

NSString *value = @”1234567890”;

比较的方法: 
[value compare:(NSString *)]; 
[value compare:(NSString *) options:(NSStringCompareOptions)]; 
[value compare:(NSString *) options:(NSStringCompareOptions) range:(NSRange)];

range:(NSRange) 
比较字符串的范围

options:(NSStringCompareOptions) 
传入 NSStringCompareOptions 枚举的值 
enum{ 
NSCaseInsensitiveSearch = 1,#不区分大小写比较 
NSLiteralSearch = 2,#区分大小写比较 
NSBackwardsSearch = 4,#从字符串末尾开始搜索 
NSAnchoredSearch = 8,#搜索限制范围的字符串 
NSNumbericSearch = 64#按照字符串里的数字为依据,算出顺序。例如 Foo2.txt < Foo7.txt < Foo25.txt 
}


SEL排序
NSMutableArray *arr = [NSMutableArray array];

for (NSInteger i = 0; i < 5; i++)
{
    Student *stu = [Student new];
    //生成10-20的随机数
    stu.age = arc4random_uniform(10) + 10;
    [arr addObject:stu];
}

#此处的sel应该理解为对数组中A对象调用自己的sel,传入值为B对象,同时返回值为NSComparisonResult
[arr sortUsingSelector:@selector(compareWithStu:)];

Student对象必须有一个自定义比较方法进行排序。
此方法必须有一个传入值(传入Student对象用以比对)和
一个返回值(NSComparisonResult类型)。

Student具体如下

.h
@interface Student : NSObject
@property (assign, nonatomic) NSInteger age;
/** 排序规则*/
- (NSComparisonResult)compareWithStu:(Student *)stu;
@end

.m
@implementation Student
/** 排序规则*/
- (NSComparisonResult)compareWithStu:(Student *)stu
{
    //按照升续排列
    if (self.age > stu.age)
    {
        return NSOrderedDescending;
    }
    else if (self.age == stu.age)
    {
        return NSOrderedSame;
    }
    else
    {
       return NSOrderedAscending;
    }
}
@end

某次运行结果为
(
    "age -> 10",
    "age -> 12",
    "age -> 12",
    "age -> 18",
    "age -> 19"
)

相关文章

  • iOS 各种排序

    数组排序 数组中字典排序 数组中字典按照某个value排序 排序方法

  • Java 数组的排序、逆序

    数组的排序、逆序测试数据 数组选择排序 数组冒泡排序 数组逆序

  • java 数组和list排序

    数组排序 其中有数组排序和数组对象排序 数组一些数字排序则直接用Arrays.sort()加数组就可以。数组对象则...

  • 数组

    数组的遍历 数组是值类型 数组的排序 冒泡排序 多维数组

  • 2018-01-14

    php数组排序 sort() - 以升序对数组排序 rsort() - 以降序对数组排序 asort() - 根据...

  • PHP排序算法

    排序算法 冒泡排序(数组排序) 快速排序(数组排序) 参考 http://www.cnblogs.com/enia...

  • 算法记录

    快速排序 基本算法: 归并排序讲数组分为两个子数组分别排序,并将有序的子数组归并使得整个数组排序; 快速排序通过一...

  • 选择排序

    选择排序 调用选择排序 生成数组 打印输出排序数组

  • 按照数组中的字符串顺序给另一个数组排序

    数组1 数组2: 数组1按照数组2的顺序排序 sortedUserDicts就是排序后的数组

  • 排序问题

    数组排序 数组排序最简单了,直接Arrays.sort(a); a是待排序的数组 根据对象中的成员变量来排序 这个...

网友评论

      本文标题:数组排序

      本文链接:https://www.haomeiwen.com/subject/mkcltktx.html