【问题标题】:How to Sort an array in an ascending order swift 2.3如何以升序对数组进行快速排序 2.3
【发布时间】:2016-09-25 07:46:15
【问题描述】:
[{
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 中使用时间戳对这个数组进行排序。任何人都可以帮助我吗?

【问题讨论】:

  • 升序是什么?姓名?时间戳?用户名?
  • 对不起,我忘记了。这是时间戳
  • 这是一个数组而不是 NSArray,所以 Sortdescriptor 在这里不起作用。
  • 这正是我想要的!!!

标签: ios iphone arrays swift sorting


【解决方案1】:
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)")

【讨论】:

    【解决方案2】:

    如果您的数组是可变的,您可以使用sortInPlace

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

    如果没有,您可以从排序创建一个新数组,就像 Kristijan 建议的那样(尽管尾随闭包不需要括号):

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

    【讨论】:

      【解决方案3】:

      您可以使用扩展获得此功能:

      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)
      

      【讨论】:

        【解决方案4】:
        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

        【讨论】:

          【解决方案5】:

          按属性“时间戳”排序

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

          【讨论】:

            【解决方案6】:

            => 首先,将您的 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 how to sort array of custom objects by property value

            【讨论】:

            • 这看起来不像 JSON。
            • 我指的是@fnc12 的答案并教它是 json :p
            猜你喜欢
            • 2017-10-03
            • 1970-01-01
            • 2014-10-18
            • 2017-04-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-03
            相关资源
            最近更新 更多