gpt4 book ai didi

ios - 使用 NSStringCompareOptions 在 iOS 中对负数字符串进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:32:06 27 4
gpt4 key购买 nike

我正在尝试对一些字符串列表进行排序。元素的名称几乎可以是任何名称,从真实名称、字符串、日期……到数字。

我用 NSNumericSearch 找到了 NSStringCompareOptions,它的运行速度足够快,而且效果很好,所以 :

[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 会留下来:

Numeric comparison only applies to the numerals in the string, 
not other characters that would have meaning in a numeric representation
such as a negative sign, a comma, or a decimal point.

但我的问题是如何实现这一点,因为我知道我不只是做这件事的人。


编辑:

感谢 Narendra Pandey,但我的实际情况有点复杂,所以他的回答不能用在这里。

假设我有一些字典,其中数字作为键,字符串作为值:

dic = {@1:@"123", @2:@"-123", @5:"MyName",...};

然后我有一个带有 id 的对象数组。

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:

也许我应该声明我有解决方案,但它比使用 NSStringCompareOptions

排序慢 4 倍
// 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];

最佳答案

NSArray * numbers = @[@1, @2, @3, @-4, @-5, @6, @9];

NSPredicate * predicateForPositive = [NSPredicate predicateWithFormat:@"integerValue >= 0"];

NSArray * positiveNumbers = [numbers filteredArrayUsingPredicate:predicateForPositive];

NSPredicate * predicateForNegative = [NSPredicate predicateWithFormat:@"integerValue <= 0"];

NSArray * NegativeNumber = [numbers filteredArrayUsingPredicate:predicateForNegative];


NSLog(@"Negative number %@",NegativeNumber);

NSLog(@"Positive number %@",positiveNumbers);

输出:

Negative  number (
"-4",
"-5"
)

Positive number (
1,
2,
3,
6,
9
)

现在对两个数组进行排序并连接两个数组。

关于ios - 使用 NSStringCompareOptions 在 iOS 中对负数字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40674076/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com