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

Swift结构体数组多级排序:按地址、物业名、卧室数排序

Swift 多单元房产数组按多优先级排序实现

需求说明

需对存储多单元房产信息的Property结构体数组排序,优先级依次为:站点地址(siteAddress)→ 物业名称(propertyName)→ 卧室数量(bedrooms),最终呈现按地址、物业、卧室数层级归类的有序结果。

原始定义与测试数据

struct Property: Hashable {
    var propertyName: String = ""
    var unitNumber: Int = 0
    var bedrooms: Double = 0
    var siteAddress: String = ""
}

var properties: Array<Property> = []
properties.append(Property(propertyName: "Tower A", unitNumber: 211, bedrooms: 2.5, siteAddress: "123 Main Street"))
properties.append(Property(propertyName: "Tower A", unitNumber: 508, bedrooms: 1, siteAddress: "413 Another Street"))
properties.append(Property(propertyName: "Tower B", unitNumber: 816, bedrooms: 2.5, siteAddress: "123 Main Street"))
properties.append(Property(propertyName: "Tower A", unitNumber: 923, bedrooms: 1, siteAddress: "123 Main Street"))
properties.append(Property(propertyName: "Tower A", unitNumber: 104, bedrooms: 3, siteAddress: "123 Main Street"))
properties.append(Property(propertyName: "Tower B", unitNumber: 304, bedrooms: 2, siteAddress: "123 Main Street"))
properties.append(Property(propertyName: "Tower B", unitNumber: 222, bedrooms: 1, siteAddress: "413 Another Street"))
properties.append(Property(propertyName: "Tower A", unitNumber: 601, bedrooms: 2, siteAddress: "413 Another Street"))

优化后的排序实现

方式一:分层条件判断(可读性强)

properties = properties.sorted { this, next in
    // 第一优先级:比较站点地址
    if this.siteAddress != next.siteAddress {
        return this.siteAddress < next.siteAddress
    }
    // 第二优先级:地址相同时比较物业名称
    else if this.propertyName != next.propertyName {
        return this.propertyName < next.propertyName
    }
    // 第三优先级:地址和物业都相同时比较卧室数量(升序)
    else {
        return this.bedrooms < next.bedrooms
    }
}

方式二:元组链式比较(简洁高效)

Swift支持元组按元素顺序依次比较,完全匹配优先级需求,代码更精简:

properties = properties.sorted {
    ($0.siteAddress, $0.propertyName, $0.bedrooms) < ($1.siteAddress, $1.propertyName, $1.bedrooms)
}

排序结果验证

排序后的数组按层级展开如下,与期望结果完全一致:

  • 123 Main Street
    • Tower A
      • 923, 1br
      • 211, 2.5br
      • 104, 3br
    • Tower B
      • 304, 2br
      • 816, 2.5br
  • 413 Another Street
    • Tower A
      • 508, 1br
      • 601, 2br
    • Tower B
      • 222, 1br

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:46:40