Swift:按自然顺序对数组进行排序

时间:2014-11-26 16:56:26

标签: ios sorting swift

我在这里订购了一本词典:

var pickerData = [
    "en":"abc",
    "jp":"xyz",
    "fr":"gya",
    "zh-CN":"uio"]

但是当我println()pickerData.keys.array时,顺序就不像了。 我想按上面的顺序对pickerData.keys.array进行排序。 它可以吗?

4 个答案:

答案 0 :(得分:2)

字典不是有序的数据结构。数组是。因此,从无序数据结构中获取密钥将导致无序结果。您需要创建自己的OrderedDictionary,这不是很难做到的。

这是一个带有有序字典示例的项目:https://github.com/lithium3141/SwiftDataStructures

如果你关心细节,这篇文章解释了整个事情:http://timekl.com/blog/2014/06/02/learning-swift-ordered-dictionaries/

答案 1 :(得分:1)

这是对数组键进行排序的方法:

let sortedKeys = sorted(pickerData.keys.array, { 
    (s1: String, s2: String) -> Bool in
    return s1 < s2
})

只需替换return语句即可将排序逻辑更改为符合您要求的逻辑。

答案 2 :(得分:1)

要获得keys数组的排序版本,考虑到它是一个不可变数组,你必须:

  • 复制到可变变量
  • 使用sort方法
  • 进行排序

这是代码:

var array = pickerData.keys.array as [String]
array.sort(<)

现在array按字母顺序排序。需要使用keys数组的副本的原因是sort在适当的位置运行,这显然不可能在不可变数组上运行。

答案 3 :(得分:0)

从Swift 4和5开始,这变得容易得多:

for mySortedKey in pickerData.keys.sorted() {
    [....]
}