如何有效地按相反顺序对对象数组进行排序?

时间:2016-04-20 04:26:49

标签: swift algorithm

假设我有一个字典数组:

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

如何对其进行排序,使其按降序排列,按" id&#34排序?

我最初的方法是:

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

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

4 个答案:

答案 0 :(得分:5)

您可以在Swift中使用sort函数。像这样:

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

答案 1 :(得分:1)

您只需使用以下代码即可使用<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> <script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>为您提供排序数组,因为sort也是一个集合类。

dictionary

在上面的代码中,您找到了排序的Dictionary。对于排序数组,您需要添加以下代码。

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

答案 2 :(得分:0)

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

sort

或紧凑:

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

$ 0..x可以访问clojure参数 关于var ordered = arrdict.sort { $0["id"] > $1["id"] } 算法Apple写道:

  

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

     

要求:Comparable中定义的小于运算符(func&lt;)   一致性是对自我元素的严格弱排序。

答案 3 :(得分:0)

    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]});
}