对许多包含数字的NSArray进行sorting
我有一个NSArray的填充NSMuttableArray对象。 这些对象中的大多数具有“1”,“2”,“3”,“4”,“5”等整数值,有时会有“家”,“最左”或“最右”的名称。 我正在尝试使用sortedArrayUsingSelector对Objective C中的数组进行sorting:@selector(compare :)在数组less于10的情况下工作正常。 但是当它有更多我开始得到“1”,“10”,“11”,“12”,“2”,“3”types的东西。 非常感激任何的帮助。 该代码不应该返回任何东西。 只需要分类并继续前进。
原始代码:
presetNamesSort = [[[NSMutableArray alloc]init]retain]; presetNamesSort = [presetNames sortedArrayUsingSelector:@selector(compare:)];
您可以使用NSArray
的-sortedArrayUsingComparator:
方法来使用自定义块获取sorting后的数组。 我发现这比-sortedArrayUsingSelector:
方便,因为你可以声明比较内联,如下所示:
NSArray *unsortedArray = [NSArray arrayWithObjects:@"Hello", @"4", @"Hi", @"5", @"2", @"10", @"1", nil]; NSArray *sortedArray = [unsortedArray sortedArrayUsingComparator:^(NSString *str1, NSString *str2) { return [str1 compare:str2 options:NSNumericSearch]; }];
这将返回一个看起来像这样的数组:
( 1, 2, 4, 5, 10, Hello, Hi )
一般来说,使用块非常好,因为它们不需要创build在代码中运行amuk的随机select器。
尝试使用NSNumericSearch
使用-[NSString compare:options:]
。 要将其与-sortedArrayUsingSelector:
一起使用,必须在NSString
上将比较调用包装为一个单独的类别方法:
- (NSComparisonResult)numericCompare:(NSString *)aString { return [self compare:aString options:NSNumericSearch]; }
用于sorting降序
NSArray *sortedArray = [arrayToSort sortedArrayUsingComparator:^(NSString *str1, NSString *str2) { return [str1 compare:str2 options:NSNumericSearch]; }]; sortedArray = [[sortedArray reverseObjectEnumerator] allObjects];`
而为了消除
NSArray *sortedArray = [arrayToSort sortedArrayUsingComparator:^(NSString *str1, NSString *str2) { return [str1 compare:str2 options:NSNumericSearch]; }];
- 从Watchkit应用程序退出是由Watchkit操作系统本身处理的,我不需要清除或重置屏幕?
- 内存pipe理与代表?
- 为什么XCode和仪器内存使用的巨大差异,是否可以?
- 在iPhone中的Google地图中添加像UISlider或UIButtom这样的子视图
- 如何完全着色UIPopoverPresentationController背景色?
- AutoLayout:UIView中的UIView有不正确的框架
- “#selector”的参数不涉及“@objc”方法,属性或初始值设定项
- 如何通过拨动开关进行设置?
- UITableViewCell上的UIPanGestureRecognizer覆盖UITableView的滚动视图手势识别器