2014-07-06 28 views
16

Giả sử chúng ta cóSắp xếp một mảng của bộ từ điển trong Swift

var filesAndProperties:Dictionary<String, Any>[]=[] //we fill the array later 

Khi tôi cố gắng sắp xếp các mảng sử dụng

filesAndProperties.sort({$0["lastModified"] > $1["lastModified"]}) 

Xcode nói "không thể tìm thấy thành viên subscript".

Làm cách nào để sắp xếp một loạt các từ điển như vậy theo các giá trị trong một khóa cụ thể?

Trả lời

42

Thông báo lỗi gây hiểu lầm. Vấn đề thực sự là trình biên dịch Swift không không biết loại đối tượng $0["lastModified"] là gì và cách so sánh chúng.

Vì vậy, bạn cần phải rõ ràng hơn một chút, ví dụ

filesAndProperties.sort { 
    item1, item2 in 
    let date1 = item1["lastModified"] as Double 
    let date2 = item2["lastModified"] as Double 
    return date1 > date2 
} 

số điểm nếu timestamps đang nổi, hoặc

filesAndProperties.sort { 
    item1, item2 in 
    let date1 = item1["lastModified"] as NSDate 
    let date2 = item2["lastModified"] as NSDate 
    return date1.compare(date2) == NSComparisonResult.OrderedDescending 
} 

nếu timestamps là NSDate đối tượng.

1

Ở đây, Vấn đề là trình biên dịch không thể hiểu được loại đối tượng $ 0 ["lastModified"] là.

nếu timestamps được các số dấu phảy: -

filesAndProperties = filesAndProperties.sorted(by: { 
       (($0 as! Dictionary<String, AnyObject>)["lastModified"] as? Double)! < (($1 as! Dictionary<String, AnyObject>)["lastModified"] as? Double)! 
      }) 
Các vấn đề liên quan