【问题标题】:Better Swift array sorting method?更好的 Swift 数组排序方法?
【发布时间】:2018-07-11 02:19:28
【问题描述】:

我正在尝试从最大到最小对 Swift 内部的一个 int 数组进行排序。我使用的代码是:

Array(data.keys).sorted(by: { $0 > $1 })

给定的数组是一个从 1 到 1,000 的整数数组。结果是:

999, 998, 997 ... 991, 990, 99, 989 ... 802, 801, 800, 80, 8, 799, 798 ...

我想要的结果是:

999, 998, 997 ... 991, 990, 989 ... 802, 801, 800, 799, 798 ...

【问题讨论】:

  • 您没有整数数组。你有一个字符串数组。

标签: arrays swift sorting


【解决方案1】:

您的字典键是字符串而不是整数。您可以使用数字选项对它们进行比较,如下所示:

let sorted = data.keys.sorted { 
    $0.compare($1, options: .numeric) == .orderedDescending 
}

【讨论】:

  • 这与首先映射到 int 然后排序相比(性能方面)如何? (假设[Int] 是可接受的最终结果类型)
  • 天哪,我觉得自己很笨,抱歉浪费了你的时间哈哈
【解决方案2】:

排序是基于ASCII字符串值计算的,

类型强制转换为 Int....

【讨论】:

  • Swift 不会将字符串/字符强制转换为 ASCII(一方面,因为它们是 utf 编码的(8/16/32,我不记得了),而且它几乎没有任何作用一般来说,隐式强制。
  • 我对语言的使用不当......我只是指出排序是基于字符串/字符而不是 Int 排序发生的,这是正确的解决方案所做的......