2015-05-11 6 views
0

Ive проводил много исследований и не может полностью понять эту проблему. В моем приложении у меня есть несколько текстовых полей, которые сохраняют целочисленные значения в виде переменных int (не менее 15 переменных int). Моя главная задача - сортировать от высоких до низких чисел, которые были сохранены из текстовых полей.Использование NSNumber для сортировки многочисленных целых чисел

Теперь я бы использовал следующий код для преобразования каждой отдельной целочисленной переменной в новый NSNumber, чем использовать функцию сортировки для сортировки новых NSNumbers от высокого до низкого?

NSNumber *newNumber = [NSNumber numberWithInt: my_int_variable]; 

Мне просто кажется, что это избыточный способ сортировки 12 целых переменных, и есть более простой способ. Спасибо за помощь.

+0

Вы можете использовать "C" библиотека functin 'QSort()', увидеть это [SO Ответ] (http://stackoverflow.com/a/1788048/451475). Но они должны быть в массиве «C». Поэтому, если вам нужно поместить их в массив, вы также можете использовать 'NSArray'' NSNumbers'. – zaph

+0

Не используйте отдельные переменные типа int. Используйте массив (NSArray) – rmaddy

+0

Не делайте никакой работы, просто поместите все текстовые поля в массив и отсортируйте их по своему усмотрению. (используйте текстовое или целочисленное значение из строки) – gaussblurinc

ответ

1

Переход от отдельных текстовых полей к строкам к ints к 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); 
+0

Спасибо !!! Это то, что я искал – pLokie

Смежные вопросы