簡體   English   中英

如何按升序順序對數組進行排序2.3

[英]How to Sort an array in an ascending order swift 2.3

[{
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;
}]
  • 我有這樣的數組。 我想在swift 2.3或最新版本的swift中使用時間戳對這個數組進行排序。 任何人都可以幫助我嗎?
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)")

如果你的數組是可變的,你可以使用sortInPlace

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

如果沒有,你可以從排序中創建一個新的數組,就像Kristijan所建議的那樣(盡管在尾隨閉包時不需要括號):

let newArray = yourArray.sort{$0.timestamp < $1.timestamp}
customArray.sortInPlace { 
  (element1, element2) -> Bool in
   return element1.someSortableField < element2.someSortableField
}

看看這個https://www.hackingwithswift.com/example-code/arrays/how-to-sort-an-array-using-sort

按屬性“timestamp”排序

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

您可以使用擴展程序獲得此功能:

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
  }
}

使用這樣:

 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)

=>首先,將您的Json轉換為對象。 (點擊此鏈接可以: - http://roadfiresoftware.com/2015/10/how-to-parse-json-with-swift-2/

=>然后將Array聲明為類型化數組,以便在迭代時調用方法:

var array : [yourObjectClassName] = []

=>然后你可以簡單地按以下方式對值進行排序:

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

上面的示例按名稱對所有數組進行排序。 如果需要按timeStamp排序,可以將名稱更改為timeStamp ..etc

檢查此鏈接以獲取更多排序示例: Swift如何按屬性值對自定義對象數組進行排序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM