版本记录
版本号 | 时间 |
---|---|
V1.0 | 2017.08.28 |
前言
NSDictionary
是不可变字典,它的不可变性可以参考NSArray
数组,但是它与数组还是有很大不同,尽管他们都属于集合类,下面这几篇我们继续来将一下基础类的知识。还是老规矩从整体到局部,从浅入深进行讲解,谢谢大家。感兴趣的可以参考我上面几篇。
1. NSDictionary细说(一)—— 整体了解
2. NSDictionary细说(二)—— 字典的创建
3. NSDictionary细说(三)—— 字典的初始化
4. NSDictionary细说(四)—— 共享键集、数量以及相等比较
5. NSDictionary细说(五)—— 键和值的获取
6. NSDictionary细说(六)—— 字典的遍历
一、- (NSArray<KeyType> *)keysSortedByValueUsingSelector:(SEL)comparator;
该方法的作用就是:如果字典按其值排序,则返回字典键的数组,按照它们的顺序返回。
下面看一下参数和返回值:
-
comparator
:一个指定用于比较字典中的值的方法。如果字典值小于参数,比较方法应返回NSOrderedAscending
,如果字典值大于参数,则NSOrderedDescending
,如果相等则为NSOrderedSame
。 -
return
:一个字典键的数组,按照字典中值的顺序给出。
还要注意:
- 使用比较器指定的比较方法比较成对的字典值; 将比较器消息发送到其中一个值,并将其单个参数作为字典中的其他值。
下面看一下示例代码
- (void)demoKeysSortedByValueUsingSelector
{
NSDictionary *dict = @{@"One" : @1, @"Two" : @2, @"Three" : @3};
NSArray *keyArr = [dict keysSortedByValueUsingSelector:@selector(intValue)];
NSLog(@"keyArr = %@", keyArr);
}
- (NSComparisonResult)intValue
{
return NSOrderedDescending;
}
下面看输出结果
2017-08-28 14:38:31.689491+0800 JJOC[821:494121] keyArr = (
Three,
Two,
One
)
结论:根据字典中值的排序输出字典键数组。
二、- (NSArray<KeyType> *)keysSortedByValueUsingComparator:(NSComparator)cmptr;
该方法的作用是:如果字典按照给定的比较器块的值排序,则返回字典键的数组,按照它们的顺序排列。
看一下返回值:
-
return
:字典的键的数组,如果字典按照其值使用cmptr
排序,则键的数组也按照它们的顺序排列。
看示例代码
- (void)demoKeysSortedByValueUsingComparator
{
NSDictionary *dict = @{@"One" : @1, @"Two" : @2, @"Three" : @3};
NSArray *keyArr = [dict keysSortedByValueUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
return NSOrderedDescending;
}];
NSLog(@"keyArr = %@", keyArr);
}
看输出结果
2017-08-28 14:44:24.462714+0800 JJOC[826:495080] keyArr = (
Three,
Two,
One
)
结论:通过比较器获取键的数组。
三、- (NSArray<KeyType> *)keysSortedByValueWithOptions:(NSSortOptions)opts usingComparator:(NSComparator)cmptr;
该方法的作用就是:如果使用给定的比较器块和指定的一组选项按字典值对其进行排序,则返回字典键的数组,按照它们的顺序排列。
下面看一下参数和返回值:
-
opts
:是一个枚举值。
typedef NS_OPTIONS(NSUInteger, NSSortOptions) {
NSSortConcurrent = (1UL << 0),
NSSortStable = (1UL << 4),
};
-
cmptr
:比较器的值。
typedef NS_ENUM(NSInteger, NSComparisonResult)
{
NSOrderedAscending = -1L,
NSOrderedSame,
NSOrderedDescending
};
-
return
:返回的是字典的键的数组,按照键的数组的顺序,也是字典中的值按照cmptr
和opts
中给出选项进行排序。
下面看示例代码
- (void)demoKeysSortedByValueWithOptions
{
NSDictionary *dict = @{@"One" : @1, @"Two" : @2, @"Three" : @3};
NSArray *keyArr = [dict keysSortedByValueWithOptions:NSSortConcurrent usingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
return NSOrderedDescending;
}];
NSLog(@"keyArr = %@", keyArr);
}
看输出结果
2017-08-28 14:53:22.085665+0800 JJOC[829:496055] keyArr = (
Three,
Two,
One
)
结论:此方法可以看做是方法二的补充。
后记
未完,待续~~~