您好我有以下
class MyClass {
var myString: String?
}
var myClassList = [String: MyClass]()
我想通过Swift 3中的myString变量按字母顺序对这个数组进行排序吗?
答案 0 :(得分:4)
很酷的问题!虽然我想首先指出[String: MyClass]
是一个字典而不是元宝。
var tupule: (String, MyClass) = (foo, bar)
然后你需要制作一个数组:
var tupules:[(String, MyClass)] = [(foo, bar), (up, dog)]
然后你可以对那个数组进行排序:
tupules.sort({ $0[1].myString > $1[1].myString })
虽然你应该定义一个更强大的排序机制。
这些是排序闭包的内容:
$ 0 是需要比较的对象之一, $ 1 是另一个。 $ 0 [1] 和 $ 1 [1] 访问对象' 1个索引,在这种情况下,如您的元组中定义的,它是您的自定义对象 MyClass
希望这有帮助。
答案 1 :(得分:2)
如上所述,你有一本字典,而不是元组。
但是,Dictionaries确实有一个sorted(by:)
方法,您可以使用它来对键/值对元组的数组进行排序。这是一个例子:
var m: [String: Int] = ["a": 1]
let n = m.sorted(by: { (first: (key: String, value: Int), second: (key: String, value: Int)) -> Bool in
return first.value > second.value
})
这扩展到显示封闭的完整签名,但很容易缩短为:
let n = m.sorted(by: {
return $0.value > $1.value
})
此外,您还可以在字典
上执行其他枚举m.forEach { (element: (key: String, value: Int)) in
print($0.value)
}
所有这一切都归功于Swift中的Collection和sequence协议层次结构,它们是一些非常好的抽象。
答案 2 :(得分:0)
Swift版本5.2.4
let arr = [(0, 5), (1, 2), (2, 4), (3, 1), (4, 3)] // -> [(3, 1), (1, 2), (4, 3), (2, 4), (0, 5)]
let sorted = arr.sorted{ $0.1 < $1.1 }