2016-05-27 24 views
6
[{ 
msg = "Hi This is Jecky"; 
name = Susheel; 
sender = 77; 
timestamp = 1464241769520; 
username = susheel; 
}, { 
msg = Dubai; 
name = Jecky; 
sender = 78; 
timestamp = 1464246547147; 
username = Jecky; 
}, { 
msg = "How are you ?"; 
name = Susheel; 
sender = 77; 
timestamp = 1464243480381; 
username = susheel; 
}, { 
msg = "Aje dekhai nai"; 
name = Jecky; 
sender = 78; 
timestamp = 1464244974198; 
username = Jecky; 
}] 
  • Tôi có một mảng như thế này. Tôi muốn sắp xếp mảng này bằng cách sử dụng dấu thời gian trong phiên bản 2.3 nhanh hoặc mới nhất của swift. Bất cứ ai có thể giúp tôi cho điều này?
+1

Thứ tự tăng dần của cái gì? Tên? Dấu thời gian? Tên người dùng? – Thilo

+0

xin lỗi dude tôi quên điều đó. Đó là dấu thời gian – Jecky

+0

Kiểm tra câu trả lời này: http://stackoverflow.com/a/24685377/3202193 –

Trả lời

7
let array=[ 
     [ 
      "msg":"Hi This is Jecky", 
      "name":"Susheel", 
      "sender":77, 
      "timestamp":1464241769520, 
      "username":"susheel", 
     ], 
     [ 
      "msg":"Dubai", 
      "name":"Jecky", 
      "sender":78, 
      "timestamp":1464246547147, 
      "username":"Jecky", 
     ], 
     [ 
      "msg":"How are you ?", 
      "name":"Susheel", 
      "sender":77, 
      "timestamp":1464243480381, 
      "username":"susheel", 
     ], 
     [ 
      "msg":"Aje dekhai nai", 
      "name":"Jecky", 
      "sender":78, 
      "timestamp":1464244974198, 
      "username":"Jecky", 
     ], 
    ] 
    print("array = \(array)") 
    let sortedArray=array.sort { (obj1, obj2) -> Bool in 
     return (obj1["timestamp"] as! Double) < (obj2["timestamp"] as! Double) 
    } 
    print("sortedArray = \(sortedArray)") 
0

=> Đầu tiên, chuyển đổi Json của bạn thành Đối tượng. (Kiểm tra liên kết này để làm điều đó: - http://roadfiresoftware.com/2015/10/how-to-parse-json-with-swift-2/)

=> Sau đó tuyên bố mảng của bạn như là một mảng gõ để bạn có thể gọi các phương thức khi bạn lặp:

var array : [yourObjectClassName] = [] 

=> Sau đó, bạn có thể chỉ đơn giản là sắp xếp các giá trị theo:

array.sort({ $0.name > $1.name }) 

Ví dụ trên sắp xếp tất cả các mảng theo tên. Nếu bạn cần phải sắp xếp theo dấu thời gian bạn có thể thay đổi tên để timestamp ..etc

Kiểm tra liên kết này để biết thêm những ví dụ sắp xếp: Swift how to sort array of custom objects by property value

+0

Điều này không giống như JSON. – Thilo

+0

tôi đã đề cập đến câu trả lời @ fnc12 và đã dạy nó là json: p –

4

Nếu mảng của bạn có thể thay đổi bạn có thể sử dụng sortInPlace

yourArray.sortInPlace{$0.timestamp < $1.timestamp} 

và nếu không, bạn có thể tạo một mảng mới từ sắp xếp, như đề nghị của Kristijan (mặc dù không cần ngoặc trên đóng cửa trailing):

let newArray = yourArray.sort{$0.timestamp < $1.timestamp} 
1

Để sắp xếp bởi tài sản "timestamp"

array.sorted{$1["timestamp"] as? Long > $0["timestamp"] as? Long} 
0

Bạn có thể nhận được chức năng này sử dụng phần mở rộng:

extension NSArray{ 
//sorting- ascending 
    func ascendingArrayWithKeyValue(key:String) -> NSArray{ 
    let ns = NSSortDescriptor.init(key: key, ascending: true) 
    let aa = NSArray(object: ns) 
    let arrResult = self.sortedArray(using: aa as! [NSSortDescriptor]) 
    return arrResult as NSArray 
    } 

    //sorting - descending 
    func discendingArrayWithKeyValue(key:String) -> NSArray{ 
    let ns = NSSortDescriptor.init(key: key, ascending: false) 
    let aa = NSArray(object: ns) 
    let arrResult = self.sortedArray(using: aa as! [NSSortDescriptor]) 
    return arrResult as NSArray 
    } 
} 

sử dụng như thế này:

let array=[ 
     [ 
     "msg":"Hi This is Jecky", 
     "name":"Susheel", 
     "sender":77, 
     "timestamp":1464241769520, 
     "username":"susheel", 
     ], 
     [ 
     "msg":"Dubai", 
     "name":"Jecky", 
     "sender":78, 
     "timestamp":1464246547147, 
     "username":"Jecky", 
     ], 
     [ 
     "msg":"How are you ?", 
     "name":"Susheel", 
     "sender":77, 
     "timestamp":1464243480381, 
     "username":"susheel", 
     ], 
     [ 
     "msg":"Aje dekhai nai", 
     "name":"Jecky", 
     "sender":78, 
     "timestamp":1464244974198, 
     "username":"Jecky", 
     ], 
     ] 

    let a = NSArray.init(array: array) 
    let filArray = a.ascendingArrayWithKeyValue(key: "timestamp") 
    print(filArray) 
Các vấn đề liên quan