Swift (Xcode 7.3.1) 并使用字典中的值进行排序

Swift (Xcode 7.3.1) and sorting using values in a Dictionary

我有一个字典数组,如下所示,我想对其进行排序和存储,以便根据 'Like' 键的 'value' 对对象进行排序?我如何在 Swift 中执行此操作?谢谢

{
    Dislike = 0;
    Like = 5;
    userName = T; }
{
    Dislike = 0;
    Like = 0;
    userName = S; }
{
    Dislike = 0;
    Like = 10;
    userName = N; }

我想这是一个字典数组?

如果是这样,您可以按如下排序

//AnyObject in case your number is an NSNumber
var array: [[String:AnyObject?]] = yourArray 

array.sort{ [=10=]["Like"]!! > ["Like"]!! }

基本上它会改变数组并根据 "Like" 键进行排序。

你知道这个数据结构看起来很奇怪。我认为是[[String: Any]]。它应该这样声明:

let data: [[String: Any]] = [
    [
        "Dislike": 0,
        "Like": 5,
        "username": "T"],

    [
        "Dislike": 0,
        "Like": 0,
        "username": "S"],

    [
        "Dislike": 0,
        "Like": 10,
        "username": "N"],
]

要对其进行排序,只需使用 sort 函数即可。在闭包中,你应该 return 第一个参数是否应该排在第二个参数之前。在这种情况下,您只想比较与键 "Like" 对应的值。闭包主体看起来像这样:(伪代码)

firstParameter["Like"] < secondParameter["Like"]

正如我所说,那是伪代码。真正的代码稍微复杂一点:

data.sort { ([=12=]["Like"]! as! Int) < (["Like"] as! Int) }

Sweeper 和 Edder 说得对,它看起来像一个结构体数组。您也可以省略分号。

struct s {
    var Dislike: Int = 0
    var Like: Int = 0
    var userName: String = ""
}

var myArray = [s]()
var i = s()

i.Dislike = 0
i.Like = 5
i.userName = "T"
myArray.append(i)

i.Dislike = 0
i.Like = 0
i.userName = "S"
myArray.append(i)

i.Dislike = 0
i.Like = 10
i.userName = "N"
myArray.append(i)

myArray.sort{[=10=].Like < .Like}