我想按出现在每个数组对象不同位置的字符串排序。
我有一个包含以下对象的nsarray:
Jones John 05-12-1993 Diabetes *05-13-2019 **R ***No Data ****68xxx
Smith John 05-12-2019 Hypertension *05-12-2019 **R ***05-12-2019 ****117xx
Smithers John 05-12-1947 COPD *05-13-2019 **R ***05-13-2019 ****89xxx
Wilson John 05-13-2019 Atrial Fibrillation *05-13-2019 **R ***05-16-2019 ****90xxx
Davis Joe 05-23-1905 Hypertension *05-25-2019 **R ***05-23-2019 ****42xxx
我需要按单个星号后的日期对数组进行排序。我不知道该怎么做。我已经尝试了许多示例,但是没有用。有什么建议么?谢谢。
我已经尝试过了,当然,它仅按每个对象的开头进行排序
[self.nameAndDOB sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; // 1-5 sort patient roster by last name
答案 0 :(得分:0)
localizedCaseInsensitiveCompare:是一种比较字符串的方法。显然,它并没有按照您想要的方式对它们进行比较。您应该接受的挑战是编写一个方法,该方法以您要比较它们的方式比较字符串,并将该方法的选择器传递给sortUsingSelector:
我通常使用基于块的排序方法之一;更容易编写,更灵活。
答案 1 :(得分:0)
您可以做以下事情
答案 2 :(得分:0)
我将使用正则表达式提取日期字符串,将其转换为日期,然后对其进行排序。像这样:
let array = [
"Jones John 05-12-1993 Diabetes *05-13-2019 **R ***No Data ****68xxx",
"Smith John 05-12-2019 Hypertension *05-12-2019 **R ***05-12-2019 ****117xx",
"Smithers John 05-12-1947 COPD *05-13-2019 **R ***05-13-2019 ****89xxx",
"Wilson John 05-13-2019 Atrial Fibrillation *05-13-2019 **R ***05-16-2019 ****90xxx",
"Davis Joe 05-23-1905 Hypertension *05-25-2019 **R ***05-23-2019 ****42xxx"
]
let patt = " \\*\\d\\d\\-\\d\\d\\-\\d\\d\\d\\d"
let regex = try! NSRegularExpression(pattern: patt, options: [])
let f = DateFormatter()
f.dateFormat = "mm/dd/yyyy"
let array2 = array.map { s -> Date in
let r =
regex.firstMatch(in: s, options: [], range: NSRange(s.startIndex..., in: s))!.range
let ss =
(s as NSString).substring(with: NSRange(location: r.location+2, length: r.length-2))
return f.date(from:ss)!
}
let sorted = zip(array,array2).sorted{$0.1 < $1.1}.map{$0.0}
结果是
[
"Smith John 05-12-2019 Hypertension *05-12-2019 **R ***05-12-2019 ****117xx",
"Jones John 05-12-1993 Diabetes *05-13-2019 **R ***No Data ****68xxx",
"Smithers John 05-12-1947 COPD *05-13-2019 **R ***05-13-2019 ****89xxx",
"Wilson John 05-13-2019 Atrial Fibrillation *05-13-2019 **R ***05-16-2019 ****90xxx",
"Davis Joe 05-23-1905 Hypertension *05-25-2019 **R ***05-23-2019 ****42xxx"
]
...我认为您会同意,这是基于您所说内容的正确答案。
但是,正如其他人所说的那样,最初提出的问题很愚蠢。首先,您不应该处理这些结构化字符串。您应该从一开始就将它们解析为自定义结构,并改为使用该结构的实例。