我有一个包含数组作为其元素的字典,我想按其中一个数组值排序。我找到的所有解决方案,用于排序单个元素而不是数组的字典。另外,我不明白$ 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]
我对编码比较陌生,所以我真的不知道如何处理这个问题。
答案 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