首页 > 解决方案 > 按多个属性对包含字符串和整数的数组进行排序

问题描述

我有一个数组SortedELRStructure,我需要按它的elr属性排序,以及它的railwayID. 我遇到的问题railwayID是使用字符串值填充,因为它可能是 ["1A", "C0284", "300000"] 等,所以当我按 railID 对数组进行排序时,会将它们排序为字符串,我得到返回 [“101023”、“10A”、“11”、“12”、“110032”](示例)。

除了按字符串排序外,如何按 的数值对这种类型的数组进行排序railwayID,即使它包含字母?elr

到目前为止,我已经尝试了以下方法,我认为已经接近但铁路 ID 仍被排序为字符串:

let sorted = sortedDayListItems.sorted { t1, t2 in
    if t1.elr == t2.elr {
        if t1.railwayID.isInt && t2.railwayID.isInt {
            return Int(t1.railwayID)! < Int(t2.railwayID)!
        } else {
                 
        }
        return t1.railwayID < t2.railwayID
    }
    return (t1.elr != nil) && (t2.elr == nil)
}

struct SortedELRStructure {
    var dataItem: CalendarSurveyDataItem
    var elr: String
    var railwayID: String
}

标签: arraysswiftsorting

解决方案


您只需要创建一个自定义排序方法。如果 ELR 元素相等,则使用本地化标准比较对 ralwayID 进行排序,否则仅按 ELR 排序

let sorted = sortedDayListItems.sorted {
    if $0.elr == $1.elr {
        return $0.railwayID.localizedStandardCompare($1.railwayID) == .orderedAscending
    }
    return $0.elr < $1.elr
}

推荐阅读