Сортировка строки отрицательных чисел в iOS с помощью NSStringCompareOptionsIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Сортировка строки отрицательных чисел в iOS с помощью NSStringCompareOptions

Сообщение Anonymous »

Я пытаюсь отсортировать список строк. Имена элементов могут быть практически любыми: от реальных имен, строк, дат и чисел.
Я нашел NSStringCompareOptions с помощью NSNumericSearch, которые работают достаточно быстро и хорошо работает:
[1,2,21,3,55,6] --> [1,2,3,6,21,55]

Но мои проблемы — это отрицательные числа
[1,2,3,-1,-4,-5] --> [-1,-4,-5,1,2,3]

Это неправильно.
Я знаю, что Apple говорит:

Числовое сравнение применяется только к цифрам в строке, а не к другим символам, которые имеют значение в числовом представлении, например знаку минус, запятой или десятичной точке.
Но мой вопрос в том, как этого добиться, потому что я знаю, что я не единственный, кто это делает.

РЕДАКТИРОВАТЬ:< /p>
Спасибо Нарендре Панди, но мой реальный случай немного сложен, поэтому его ответ не может быть использован здесь.
Итак, допустим, я иметь словарь с числами в качестве ключей и строками в качестве значений:
dic = {@1:@"123", @2:@"-123", @5:"MyName",...};

затем у меня есть массив объектов с идентификаторами.
array = @[{object with id 5}, {object with id 2},...];

и мне нужен отсортированный массив объектов по имени свойств.
NSStringCompareOptions comparisonOption = NSCaseInsensitiveSearch | NSNumericSearch;

array = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

NSString * name1 = [dic objectForKey:obj1.someId];
NSString * name2 = [dic objectForKey:obj2.someId];

return [name1 compare:name2 options:comparisonOption];;
}];


РЕДАКТИРОВАТЬ 2:
Может быть, мне следует заявить, что у меня есть решение, но оно в 4 раза медленнее, чем сортировка с NSStringCompareOptions
// CHECK IF IT IS NUMBER

NSNumber * number1 = [numberFormatter numberFromString:string1];
NSNumber * number2 = [numberFormatter numberFromString:string2];
//
// NSLog(@"NUMBERS : %@, %@", number1, number2);
if (number1 && number2) {
return [number1 compare:number2];
}

return [string1 compare:string2 options:comparisonOption];


Подробнее здесь: https://stackoverflow.com/questions/406 ... areoptions
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»