Я пытаюсь отсортировать список строк. Имена элементов могут быть практически любыми: от реальных имен, строк, дат и чисел.
Я нашел 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
Сортировка строки отрицательных чисел в iOS с помощью NSStringCompareOptions ⇐ IOS
Программируем под IOS
1730053992
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];
Подробнее здесь: [url]https://stackoverflow.com/questions/40674076/sort-negative-number-string-in-ios-with-nsstringcompareoptions[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия