你应该使用 sort 对数组进行排序的方法。
sort
让我们首先创建一个未排序的数组:
var arr = [["A", "Hello world"], ["C", "Bye world"], ["B", "idk what to say here"]]
现在让我们来看看它的论点 sort 方法需要。显然它需要关闭以下签名:
([String], [String]) -> Bool
最简单(但不那么开心)的方法是用该签名编写一个函数:
func myFunction (first: [String], second: [String]) -> Bool { }
在该函数中,您需要确定算法是否应该交换两个参数。如果不应该,则返回true,否则返回false。我想如果你想按字母顺序排序,你应该比较两个字符串
return first[1] < second[1]
您可以访问索引1处的元素,因为这是存储国家/地区名称的位置,对吧?
然后,打电话 sort 与功能
arr = arr.sort(myFunction)
但是,这不是很快。为了使这个最开心,你可以这样做:
arr.sort { $0[1] < $1[1] }
好多了!
您可以执行以下操作:
prefixCodes.sort { $0[1] < $1[1] }
但为了更安全,我认为你应该定义一个这样的Country结构:
struct Country { let code: String let name: String init(_ code: String, _ name: String) { self.code = code self.name = name } } let countries = [Country("AD", "Andorra"), Country("AE", "United Arab Emirates"), Country("BQ", "Caribbean Netherlands")] print(countries.sort { $0.name < $1.name })
因此,如果您想向您的国家/地区添加更多详细信息,您将无法打破排序关闭。
或者,如果您想保持简单但仍强制执行强类型,则可以使用元组:
let countries = [("AD", "Andorra"), ("AE", "United Arab Emirates"), ("BQ", "Caribbean Netherlands")] print(countries.sort { $0.1 < $1.1 })
如果在数组中混合使用不同的元组长度:
let countries = [("AD", "Andorra"), ("toto"), ("tata", "titi", "tutu")]
Swift将返回此错误:
错误:没有更多上下文,表达式的类型是不明确的
希望这会帮助你。
let sortedArray = prefixCodes.sort { (first, second) -> Bool in return first.last < second.last }