arrays - 按多个属性对包含字符串和整数的数组进行排序
问题描述
我有一个数组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
}
解决方案
您只需要创建一个自定义排序方法。如果 ELR 元素相等,则使用本地化标准比较对 ralwayID 进行排序,否则仅按 ELR 排序
let sorted = sortedDayListItems.sorted {
if $0.elr == $1.elr {
return $0.railwayID.localizedStandardCompare($1.railwayID) == .orderedAscending
}
return $0.elr < $1.elr
}
推荐阅读
- regex - 从字符串中提取键值
- python - 使用自定义层保存 TensorFlow 模型
- python - 通过将 Pdf1 放在 Pdf2、Pdf3 的顶部来创建多个 PDF
- python - 如何利用窗口的“打开方式”选项将文件数据加载到 python 文件中?
- python - 为什么 OpenCV SimpleBlobDetector 不能检测到所有的 blob?
- c++ - 为什么这个简单的 Gecode 示例无法编译?
- r - 编写一个函数来比较一系列数值变量的差异
- python - 函数调用自身后不会返回值
- ansible - Ansible 找不到模板目录
- express - 无法从 axios.delete 服务器端获取正文