Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 排序此数组有困难_Ios_Objective C_Sorting_Nsmutablearray_Nsarray - Fatal编程技术网

Ios 排序此数组有困难

Ios 排序此数组有困难,ios,objective-c,sorting,nsmutablearray,nsarray,Ios,Objective C,Sorting,Nsmutablearray,Nsarray,我想按每个数组对象中不同位置出现的字符串进行排序 我有一个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-201

我想按每个数组对象中不同位置出现的字符串进行排序

我有一个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

localizedCaseInsensitiveCompare:是一种比较字符串的方法。很明显,它并没有按照你想要的方式进行比较。如果您接受,您的挑战是编写一个方法,以您希望的方式比较字符串,并将该方法的选择器传递给sortUsingSelector:


我通常使用一种基于块的排序方法;更容易写,更灵活

你可以做以下事情

  • 从字符串中提取日期,你必须根据你的算法或正则表达式来做

我将使用正则表达式提取日期字符串,将其转换为日期,并对其进行排序。像这样:

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}
。。。根据你所说的,我想你会同意这是正确的答案


然而,正如其他人所说,最初提出的问题是愚蠢的。首先,您不应该处理这些结构化字符串。您应该从一开始就将它们解析为自定义结构,并使用该结构的实例。

您必须提取日期字符串(最好使用正则表达式)并对其排序。或者更好地将字符串解析为具有适当属性的自定义类我强烈建议使用真正的自定义对象,而不是那样的字符串。有名字的物体,苏南,生日(?)日期,分析?日期、症状等,我不明白。您能添加一个示例代码段吗?谢谢。我想您没有注意到问题被标记为objective-c,它缺少与
map
zip
和元组的直接等价物;自定义结构建议可能并不适用。不过回答得很快。@CRD我什么也没漏掉。语言是不相关的。NSR和NSDateFormatter是基础的一部分。我描述了一种技术,并展示了它的有效性。好吧,很高兴你没有遗漏任何东西,只是想提供帮助。然而,除非我们要在图灵完整性的层面上进行辩论,否则我必须表示不同,并说语言并非无关紧要。祝你今天愉快,谢谢。我知道它的结构,有很多方法可以剥猫皮,但我正在处理一个遗留应用程序的修复,所以现在,我需要处理我被处理的手;)这个概念看起来会起作用,但我对swift一无所知。有人能在Objc中复制这个吗。我非常感激。谢谢
[
    "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"
]