使用NSNumber对许多整数进行排序

时间:2015-05-11 22:12:54

标签: objective-c

我一直在做很多研究,并且不能很好地解决这个问题。在我的应用程序中,我有几个文本字段以int变量的形式保存整数值(至少15个int变量)。我的主要目标是整理从文本字段中保存的从高到低的数字。

现在我将使用以下代码将每个单独的整数变量转换为新的NSNumber,而不是使用排序函数将新的NSNumber从高到低排序?

NSNumber *newNumber = [NSNumber numberWithInt: my_int_variable];

我只觉得这是一种排序12个整数变量的冗余方式,并且有一种更简单的方法。谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

从单个文本字段到字符串到整数到NSNumbers到一个数组到一个已排序的数组是一个漫长而笨重的行程。但是值得一游。

// assume these
UITextField *field0;
UITextField *field1;    
UITextField *field2;

// make an array for the input and the result
NSArray *textFields = @[field0, field1, field2];
NSMutableArray *numbers = [@[] mutableCopy];

// prepare a number formatter
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
// lots of choices here.  see https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSNumberFormatter_Class/index.html

for (UITextField *textField in textFields) {
    NSString *text = textField.text;
    NSNumber *number = [formatter numberFromString:text];
    [numbers addObject:number];
}

// sort...a few choices here, too. taking the simplest:
[numbers sortUsingSelector:@selector(compare:)];
NSLog(@"ta da: %@", numbers);

或者您想根据内容对文本字段进行排序吗?可行:

NSMutableArray *textFields = [@[field0, field1, field2] mutableCopy];

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;

[textFields sortedUsingComparator: ^(id objA, id objB) {
     NSString *textA = ((UITextField *)objA).text;
     NSString *textB = ((UITextField *)objB).text;

     NSNumber *numberA = [formatter numberFromString:textA];
     NSNumber *numberB = [formatter numberFromString:textB];

     return [numberA compare:numberB];
}];

NSLog(@"text fields in order of their contents: %@", textFields);