gpt4 book ai didi

ios - 如何在 iOS 中对大小字符串的 NSArray 进行排序?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:22:03 25 4
gpt4 key购买 nike

有一个 NSSet,其中包含产品的一些尺寸字符串。我正在尝试使用 NSSortDescriptor 对数组进行排序。由于它按字母顺序排序,因此结果并不完全正确。

代码片段如下:

NSSet *set = [[NSSet alloc] initWithObjects:@"40", @"30", @"31", @"3XL", @"44", @"46", @"50", @"52", @"54", @"56", @"48", @"33", @"L", @"M", @"S", @"XL", @"XS", @"XXS",@"XXL",nil];
NSArray *sizeArray = [set allObjects];
NSSortDescriptor *sizeSort = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending: YES];
NSArray *sortedArray = [sizeArray sortedArrayUsingDescriptors:@[sizeSort]];

NSLog(@"Set: %@ \n Sorted: %@", set, sortedArray);

输出如下:

设置:{( 46, 52、 加大号, XXS, 54、 48, 33、 44, 50, 大号, 40, 米, , 30, 56, XS, XXL, 3XL, 31)} 排序: ( 30, 31, 33、 3XL, 40, 44, 46, 48, 50, 52, 54、 56, 大号, 米, , 加大号, XS, XXL, XXS)

理想的结果应该是(30, 31, 33, 40, 44, 46, 48, 50, 52, 54, 56, XXS, XS, S, M, L, XL, XXL, 3XL )

有没有更好的排序方式?

最佳答案

NSSet *set = [[NSSet alloc] initWithObjects:@"40", @"30", @"31", @"3XL", @"44", @"46", @"50", @"52", @"54", @"56", @"48", @"33", @"L", @"M", @"S", @"XL", @"XS", @"XXS",@"XXL",nil];
NSArray *sizeArray = [set allObjects];

NSArray *sizes = @[@"XXS", @"XS", @"S", @"M", @"L", @"XL", @"XXL", @"3XL"];
NSArray *sortedArray = [sizeArray sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
NSUInteger index1 = [sizes indexOfObject:obj1];
NSUInteger index2 = [sizes indexOfObject:obj2];
if (index1 == NSNotFound && index2 == NSNotFound) {
return [@([obj1 intValue]) compare:@([obj2 intValue])];
}
else if (index1 == NSNotFound)
{
return NSOrderedAscending;
}
else if (index2 == NSNotFound)
{
return NSOrderedDescending;
}
return [@(index1) compare:@(index2)];
}];

NSLog(@"Set: %@ \n Sorted: %@", set, sortedArray);

输出:

Set: ( 46, 52, XL, XXS, 54, 48, 33, 44, 50, L, 40, M, S, 30, 56, XS, XXL, 3XL, 31 )
Sorted: (30, 31, 33, 40, 44, 46, 48, 50, 52, 54, 56, XXS, XS, S, M, L, XL, XXL, 3XL )

关于ios - 如何在 iOS 中对大小字符串的 NSArray 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23468198/

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