You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Objective-C中多维数组按首元素字母排序失败的解决方法求助

多维数组按子数组首元素排序的解决方案

你之前的代码无效的核心原因是:错误地对elementsArray[0](第一个子数组)执行排序操作,而非对包含所有子数组的整个大数组elementsArray排序。下面提供几种可行的实现方式:

方式一:使用排序函数

基于你尝试过的函数式排序,修正后代码如下:

static NSInteger sortByFirstElement(id a, id b, void *context) {
    // 取出每个子数组的第一个NSString元素
    NSString *strA = [a objectAtIndex:0];
    NSString *strB = [b objectAtIndex:0];
    // 不区分大小写比较
    return [strA caseInsensitiveCompare:strB];
}

// 对整个大数组排序
NSArray *sortedArray = [elementsArray sortedArrayUsingFunction:sortByFirstElement context:NULL];

方式二:使用Block排序(推荐)

Objective-C支持用Block直接编写排序逻辑,代码更简洁直观,无需单独定义函数:

NSArray *sortedArray = [elementsArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    NSString *str1 = [obj1 objectAtIndex:0];
    NSString *str2 = [obj2 objectAtIndex:0];
    return [str1 caseInsensitiveCompare:str2];
}];

额外优化建议:用自定义模型替代多维数组

如果业务场景允许,建议创建自定义类封装这三个关联数据,代码可读性和可维护性会大幅提升:

// 定义模型类
@interface ItemModel : NSObject
@property (nonatomic, copy) NSString *mainString;
@property (nonatomic, strong) NSNumber *numericValue;
@property (nonatomic, copy) NSString *secondaryString;
@end

// 排序时直接访问属性
NSArray *sortedModels = [itemModelsArray sortedArrayUsingComparator:^NSComparisonResult(ItemModel *model1, ItemModel *model2) {
    return [model1.mainString caseInsensitiveCompare:model2.mainString];
}];

注意事项

  • 确保elementsArray是包含多个子数组的顶层数组,每个子数组至少包含3个元素,且第一个元素为NSString类型
  • 排序后的数组会保留每个子数组内三个元素的关联关系,仅调整顶层数组的元素顺序

内容的提问来源于stack exchange,提问作者ScottHa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:35:17