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

什么是比较所有值的有效和伟大的方式NSArray,包含NSNumbersfloats找到的最大一个和最小的一个?

有什么想法如何在Objective-C中做到又好又快呢?


杨魅力
浏览 621回答 3
3回答

湖上湖

通过包装在NSNumber下来保存浮点数,然后NSNumber *max=[numberArray valueForKeyPath:@"@max.doubleValue"];NSNumber *min=[numberArray valueForKeyPath:@"@min.doubleValue"];* 未编译检查,已经用intValue检查,不确定double或float

交互式爱情

我同意先对数组进行排序,然后选择第一个和最后一个元素,但是我发现此解决方案更优雅(通过更改块内的比较,该解决方案也适用于非数字对象):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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS