如何按字典Swift中包含的数组值对字典进行排序

时间:2015-09-21 13:09:36

标签: arrays swift sorting dictionary

我有一个包含数组作为其元素的字典,我想按其中一个数组值排序。我找到的所有解决方案,用于排序单个元素而不是数组的字典。另外,我不明白$ 0.0是什么意思?下面是我想要完成的代码示例。

var dict = ["Mike": [62, 160], "Jim": [72, 210], "Tony": [68, 187]]

//I want to sort by the height (array values [0]) from highest value to lowest.
//The output would look like this:

"Jim": [72, 210]
"Tony": [68,187]
"Mike": [62,160]

我对编码比较陌生,所以我真的不知道如何处理这个问题。

2 个答案:

答案 0 :(得分:2)

请参阅,您要对字典进行排序:

let dict = ["Mike": [62, 160], "Jim": [72, 210], "Tony": [68, 187]]

您希望使用某个函数isOrderedBefore: (Self.Generator.Element, Self.Generator.Element) -> Bool对其进行排序,因此如果第一个元素应该高于第二个元素,则应将a > b放入函数中,依此类推。

let sortedDict = dict.sort { (first: (String, Array<Int>), second: (String, Array<Int>)) -> Bool in
    return first.1[0] > second.1[0]
}

它与:

相同
let sortedDict = dict.sort {
    return $0.1[0] > $1.1[0]
}

或者:

let sortedDict = dict.sort { $0.1[0] > $1.1[0] }

$0表示函数的变量的编号为0,依此类推。 $0.0表示您获得了第一个字典字段(在您的情况下是名称),而$0.1表示它是第二个字典字段(数组)。

答案 1 :(得分:0)

你应该使用name和这两个值来创建一个对象(或者如果它更适合这种情况的结构)。然后将所有对象存储在一个数组中,无论如何你都可以对它进行排序。

class MyObject {

    let name: NSString!
    let aValue: Integer!
    let bValue: Integer!

    // MARK: - Memory Management

    init(name: NSString, aValue: Integer, bValue: Integer) {
        self.name = name
        self.aValue = aValue
        self.bValue = bValue
    }
}

然后在其他地方:

let myArray = // fetch, set the values using init method and sort it