在swift 3

时间:2016-12-13 02:43:50

标签: arrays swift sorting swift3 tuples

您好我有以下

class MyClass {
  var myString: String?
}

var myClassList = [String: MyClass]()

我想通过Swift 3中的myString变量按字母顺序对这个数组进行排序吗?

3 个答案:

答案 0 :(得分:4)

很酷的问题!虽然我想首先指出[String: MyClass]是一个字典而不是元宝。

然而,斯威夫特确实支持Tupules。你的元组的语法如下:

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 }