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

Swift中如何按String类型的name属性对Employee数组排序?

解决按name属性排序失效的问题

嘿,我一眼就发现问题所在了——Swift是严格区分大小写的语言,你在排序闭包里写错了属性名!

你的employee类里定义的属性是小写的name,但你在sorted(by:)里写成了大写的Name,这就导致闭包无法正确访问对象的name属性,自然不会按预期排序。

修正步骤

  1. 把排序闭包里的$0.Name和$1.Name改成$0.name和$1.name
  2. 顺便提一句:Swift的命名规范里,类名应该用大驼峰(比如Employee而非employee),这样代码可读性更好,我在示例里也帮你修正了这个细节

修正后的完整代码

class Employee: Comparable {
    var id = 10
    var name = "Deepak"
    
    init() { }
    
    init(id: Int, name: String) {
        self.id = id
        self.name = name
    }
    
    static func == (lhs: Employee, rhs: Employee) -> Bool {
        return lhs.id == rhs.id && lhs.name == rhs.name
    }
    
    static func < (lhs: Employee, rhs: Employee) -> Bool {
        if lhs.id != rhs.id {
            return lhs.id < rhs.id
        } else {
            return lhs.name < rhs.name
        }
    }
}

var a1 = Employee(id: 15, name: "Deepak")
var b1 = Employee(id: 10, name: "Shekhar")
var employeeArray = [a1, b1]

// 修正属性名后的排序代码
var newEmployeeArray = employeeArray.sorted(by: {$0.name < $1.name})

// 打印验证:现在会输出Shekhar对应的id 10,然后是Deepak的15
print(newEmployeeArray[0].id, newEmployeeArray[1].id, separator:",")

额外说明

你之前用employeeArray.sorted()能生效,是因为你实现了Comparable协议的<方法,默认排序会遵循这个方法里的逻辑(先按id排序,id相同时再按name排序)。而自定义的sorted(by:)闭包因为属性名错误,相当于没有提供有效的排序逻辑,所以没有达到预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:54:10