为了账号安全,请及时绑定邮箱和手机立即绑定

在NSNumbers的NSArray中寻找最小和最大值

在NSNumbers的NSArray中寻找最小和最大值

iOS
杨魅力 2019-11-27 13:49:52
什么是比较所有值的有效和伟大的方式NSArray,包含NSNumbers从floats找到的最大一个和最小的一个?有什么想法如何在Objective-C中做到又好又快呢?
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

通过包装在NSNumber下来保存浮点数,然后


NSNumber *max=[numberArray valueForKeyPath:@"@max.doubleValue"];

NSNumber *min=[numberArray valueForKeyPath:@"@min.doubleValue"];

* 未编译检查,已经用intValue检查,不确定double或float


查看完整回答
反对 回复 2019-11-27
?
交互式爱情

TA贡献1712条经验 获得超3个赞

我同意先对数组进行排序,然后选择第一个和最后一个元素,但是我发现此解决方案更优雅(通过更改块内的比较,该解决方案也适用于非数字对象):


NSArray *unsortedArray = @[@(3), @(5), @(1)];

NSArray *sortedArray = [unsortedArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

    NSNumber *item1 = (NSNumber *)obj1;

    NSNumber *item2 = (NSNumber *)obj2;

    return [item1 compare:item2];

}];

如果您真的想花哨并且列表很长并且不想阻塞主线程,那么应该可以这样做:


 NSComparator comparison = ^NSComparisonResult(id obj1, id obj2) {

    NSNumber *item1 = (NSNumber *)obj1;

    NSNumber *item2 = (NSNumber *)obj2;

    return [item1 compare:item2];

};


void(^asychSort)(void) = ^

{

    NSArray *sortedArray = [unsortedArray sortedArrayUsingComparator:comparison];

    dispatch_sync(dispatch_get_main_queue(), ^{

        NSLog(@"Finished Sorting");

        //do your callback here

    });

};


dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), asychSort);


查看完整回答
反对 回复 2019-11-27
  • 3 回答
  • 0 关注
  • 620 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信