【问题标题】:How do I sort an array of objects in reverse order efficiently?如何有效地以相反的顺序对对象数组进行排序?
【发布时间】:2016-08-12 13:00:24
【问题描述】:

假设我有一个字典数组:

[ { "id": 2 }, { "id": 59 }, { "id": 31 } ... ]

我怎样才能对它进行排序,使其按降序排列,按“id”排序?

我最初的方法是这样的:

Loop through each element, find the biggest one, and put it into a new array. Then, remove that from the element. Repeat.

但我知道这是错误的,而且效率不高。

【问题讨论】:

标签: swift algorithm


【解决方案1】:

您只需要使用下面的代码即可使用sort 为您提供排序数组,因为dictionary 也是一个集合类。

let sortedDict = wordDict.sort { $0.0 < $1.0 }
print("\(sortedDict)") // 

在上面的代码中,您找到了已排序的字典。要对数组进行排序,您需要添加以下代码。

let sortedArr = arr.sort { Int($0["id"]!) > Int($1["id"]!) }

【讨论】:

    【解决方案2】:
        var val = [ { "id": 2 }, { "id": 59 }, { "id": 31 }];
    var a = new Array();
    
    
    for (i = 0; i < val.length; i++) { 
        document.write(Object.keys(val[i]).map(function (key) {return val[i][key]})+"<br>");
        a.push(Object.keys(val[i]).map(function (key) {return val[i][key]}));
    }
    a.sort();
    
    var result = new Array();
    for (i = 0; i < val.length; i++) { 
    result.push({"id": a[i]});
    }
    

    【讨论】:

      【解决方案3】:

      我不知道它是最快还是更好,但是 swift 提供了sort 方法,该方法将 clojure 作为参数。你可以这样写:

      var ordered = arrdict.sort { (dic1, dic2) -> Bool in
          dic1["id"] > dic2["id"]
      }
      

      或紧凑:

      var ordered = arrdict.sort { $0["id"] > $1["id"] }
      

      $0..x 使得访问 clojure 参数成为可能。
      关于sort算法苹果写:

      讨论排序算法不稳定(可以改 比较相等的元素的相对顺序)。

      要求:Comparable 中定义的小于运算符 (func

      【讨论】:

        【解决方案4】:

        您可以在 Swift 中使用排序功能。像这样的:

        let arr = [["id": 2], ["id": 59], ["id": 31]]
        let sortedArr = arr.sort { Int($0["id"]!) > Int($1["id"]!) }
        

        【讨论】:

        • 感谢愤怒。如果它不是 [String: Int],而是一个自定义对象(在我的例子中是一条消息),并且它具有“id”属性怎么办?
        • 只需使用 $0.propertyName 而不是 $0["id"]。它应该可以正常工作。
        • 查看 Thilo 提供的链接。为您的自定义对象排序问题在 cmets 中提供了相同的链接。
        • arr.sort{$0.0["id"] &gt; $0.1["id"] }
        • 如果是简单的数组,可以使用内置的排序函数:arr.sort(by: &gt;)apple.co/2FqkBLl
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多