2016-07-29 131 views
1

我正在尝试对Swift中的字典数组进行排序。我的结构是这样的:在Swift中对字符串字典进行排序

[ 
    [ 
     "DateTime": "8/16/16, 4:00 PM", 
     "Owner": "Teacher1", 
     "Subject": "AP Euro", 
     "Address": "Mr. Hughes\' Room", 
     "Type": "Final", 
     "Timestamp": "2016081616009498", 
     "Location": "On Campus", 
     "Duration": "50 min", 
     "Members": "ownerKey,1,107434,109431" 
    ], 
    [ 
     "DateTime": "7/29/16, 6:35 AM", 
     "Owner": "109431", 
     "Subject": "Algebra 2 Acc", 
     "Address": "Library", 
     "Type": "Quiz", 
     "Timestamp": "2016072906356642", 
     "Location": "On Campus", 
     "Duration": "5 min", 
     "Members": "ownerKey" 
    ] 
] 

我想在每个字典中的每个“Timestamp”价值排序的数组。我怎样才能做到这一点?

我当前的代码(不工作)是:

self.todayArray.sortInPlace {item1,item2 in 

    let date1 = Int("\(item1["Timestamp"])") 
    let date2 = Int("\(item2["Timestamp"])") 

    return date1 > date2 
} 
+1

你的时间戳可能是一个32位整数太大。使用'return Double(item1 [“Timestamp”]!)

回答

4

N/M以下所有的东西,它是由DateTime字段进行排序,你要排序的时间戳字段这已经是字典序排序,所以只需使用:

foo.sortInPlace { $0["Timestamp"] < $1["Timestamp"] } 

由于时间戳是一个字符串编码的日期,你需要将其转换为第一的东西更实用,使用NSDateFormatter是最简单的方法:

有一个在这里有很多的!,你应该做更合适的东西,但是这给你的基本思路:

let foo = [ 
    [ 
     "DateTime": "8/16/16, 4:00 PM", 
     "Owner": "Teacher1", 
     "Subject": "AP Euro", 
     "Address": "Mr. Hughes\' Room", 
     "Type": "Final", 
     "Timestamp": "2016081616009498", 
     "Location": "On Campus", 
     "Duration": "50 min", 
     "Members": "ownerKey,1,107434,109431" 
    ], 
    [ 
     "DateTime": "7/29/16, 6:35 AM", 
     "Owner": "109431", 
     "Subject": "Algebra 2 Acc", 
     "Address": "Library", 
     "Type": "Quiz", 
     "Timestamp": "2016072906356642", 
     "Location": "On Campus", 
     "Duration": "5 min", 
     "Members": "ownerKey" 
    ] 
] 

let formatter = NSDateFormatter() 
formatter.dateFormat = "M/dd/yy, h:mm a" 

let sorted = foo.sort { 
    formatter.dateFromString($0["DateTime"]!)!.compare(formatter.dateFromString($1["DateTime"]!)!) != .OrderedDescending 
} 
print("\(sorted)") 
+0

foo.sort {$ 0 [“Timestamp”] <$ 1 [“Timestamp”]}是foo.sortInPlace {$ 0 [“Timestamp”] <$ 1 [“Timestamp”]}? –

+0

取决于你想要什么。为了模仿你的原始代码,是的,sortInPlace是合适的。我只是尽量避免在大部分时间使用它。 –

相关问题