2016-12-28 97 views
0

只是想知道如何字典在Swift中排序。例如下面的代码。Swift字典排序

var occupations = [ 
"Malcolm": "Captain", 
"Kaylee": "Mechanic"] 

occupations["Jayne"] = "Pirate" 

for (name, occupation) in occupations{ 
print("\(name) is a \(occupation)") 
} 

结果看起来像这样

Kaylee is a Mechanic 
Malcolm is a Captain 
Jayne is a Pirate 

我的问题的立场。循环如何决定首次通过上述循环的名称(或键)?

+4

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html#//apple_ref/doc/uid/TP40014097-CH8-ID113:*“字典存储具有**没有定义的排序**的集合中相同类型和相同类型的值的键。“* –

+0

阅读哈希表,这是Swift的'Dictionary'用于存储元素的方式。元素在表中的位置主要取决于它的哈希值和表中的存储区数量,其次是关于散列表处理冲突 – Hamish

+0

如果您只是好奇,那很好,但是请记住,绝不应该编写依赖于字典顺序的代码,因为它没有定义的顺序,所以它们有权更改不同版本之间的顺序操作系统/语言 – PeejWeej

回答

1

从苹果Collection Types Documentation:同一类型的键和 之间

字典保存协会没有定义顺序的集合中的相同类型的值。每个 值都与一个唯一密钥相关联,该密钥充当字典中值为 的标识符。 与数组中的项目不同, 中的项目字典做而不是具有指定的顺序

默认情况下,字典数据结构具有未指定的排序,意味着每次您将遍历它时,您可能会有不同的排序。不过,您可以根据的值对其进行排序,但它们都表示为数组。

所以,让我们说你要基于键排序:

var occupations = [ 
    "Malcolm": "Captain", 
    "Kaylee": "Mechanic"] 

occupations["Jayne"] = "Pirate" 

for key in occupations.keys.sort() { 
    print("KEY: \(key) VALUE: \(occupations[key])") 
} 

控制台应该显示-sorted基础上,键 - :

KEY:杰恩VALUE :可选( “海盗”)

KEY:王小强VALUE:可选( “机械师”)

KEY:马尔科姆VALUE:可选( “队长”)

注意,值是自选,你可能需要“可选的结合“他们......

希望这对我有所帮助。

+2

具有未指定的排序与无序不同 - 字典有一个顺序(它只是未指定的),因此对给定字典的重复迭代不会产生不同的元素顺序 - 您将获得相同的元素但是,添加或删除元素*可以*更改此顺序(再次,未指定顺序如何更改)。 – Hamish

+0

@Hamish th注释,答案已被编辑。 –

0

我认为你正在寻找的东西是这样的:

var occupations = [ 
     "Malcolm": "Captain", 
     "Kaylee": "Mechanic"] 

    occupations["Jayne"] = "Pirate" 

    let unsortedKeys = occupations.keys //get dictionary keys 
    let sortedKeys = unsortedKeys.sorted(by: <) //sort dictionary keys 
    for key in sortedKeys { 
     print("\(key) is a \(occupations[key])") 
    } 

希望帮助