objective-c - 使用每个元素对数组进行排序包含一个 NSString 和一个 NSNumber (double) 条目
问题描述
NSMutableArray
我用两个元素创建了一个;城市名称(索引 0 处的字符串)和与我当前位置的距离(索引 1 处的两倍)。
for (i=0;i<[City count];++i)
{
distanceFromMe = [Location distanceFromLocation:[cityLocation]];
[a addObject:[cityNames objectatIndex:i]];
[a addObject:@(distanceFromMe)]
[cityArray addObject:a]
}
“芝加哥”,560.34
“纽约”,204.3456
“雪城”,50.04
我想按升序对这个数组进行排序。
“雪城”,50.04
“纽约”,204.3456
“芝加哥”,560.34
我用了:
[cityArray sortUsingDescriptors:@[ [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES] ]];
但是我不断收到一个无法识别的选择器发送到实例的错误。在我的阅读中,该方法似乎不需要键,因为NSNumber
数组元素中只有一个键。我已经阅读了许多不同的主题,但似乎没有一个适用。
任何帮助,将不胜感激。使用 xcode obj-c 不迅速。
解决方案
我会在不使用排序描述符的情况下做到这一点。
[cityArray sortUsingComparator:
^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSArray* arr1 = obj1;
NSArray* arr2 = obj2;
return [arr1[1] compare: arr2[1]];
}];
推荐阅读
- java - 在 Java 中解析任何日期格式的单个类
- makefile - makefile 在退出前执行不存在的命令
- python-3.x - Django绝对网址在html模板中不起作用
- django - 仅发送带有 200 响应的 OPTIONS 请求
- ios - 是否可以使用 ARKit 识别虚拟图像而不是真实图像?(iOS 12)
- tensorflow - Golang Model sessionn 上的 Tensorflow 运行错误:nil-Operation。如果输出是使用 Scope 对象创建的,请参阅 Scope.Err() 了解详细信息
- excel - 自动过滤器:复制和粘贴。插入复制数据时如何偏移?
- node.js - 将 X-frame-options 设置为 Angular 6 中的 SAMEORIGIN 以阻止 iframe 标记中的站点
- android - 圆形背景 android 的阴影
- node.js - 找不到模块'@babel/runtime/core-js/object/create' Node js Express