为了账号安全,请及时绑定邮箱和手机立即绑定

Swift-字典中的存储值顺序已完全更改

/ 猿问

Swift-字典中的存储值顺序已完全更改

慕桂英546537 2019-10-21 15:39:58

我试图显示字典格式的数据。下面是三个尝试。第一次尝试,输出顺序将完全更改。第二次尝试,输出顺序与输入相同。但是,在第三次尝试中,我将变量声明为NSDictionary。我收到的确切输出。为什么字典会发生变化?请指导我。我搜索了Swift的Dictionary标签。但是我找不到。


//First Attempt

var dict : Dictionary = ["name1" : "Loy", "name2" : "Roy"]

        println(dict)


//output:

[name2: Roy, name1: Loy]


//Second Attempt

var dict : Dictionary = ["name2" : "Loy", "name1" : "Roy"]

        println(dict)


//output:

[name2: Loy, name1: Roy]

-----------------------------------------------------------


//Third Attempt With NSDictionary

var dict : NSDictionary = ["name1" : "Loy", "name2" : "Roy"]

            println(dict)


//output:

{

    name1 = Loy;

    name2 = Roy;

}

另一查询:我已使用操场进行验证。我的屏幕截图如下:

http://img2.mukewang.com/5dad60e00001b4a008030074.jpg

在这里,在NSDictionary中,我首先给name5命名,但是在右边显示name2,然后在println中,它以升序显示。为什么会这样?

http://img3.mukewang.com/5dad60e90001897c07440065.jpg

此处,在Dictionary中,我首先给出了name5,但在右侧显示了name2,然后在println中显示了如何在Dictionary行上使用它。为什么会这样?



查看完整描述

3 回答

?
阿波罗的战车

这是因为字典的定义:


字典

字典在没有定义顺序的情况下将相同类型的键和相同类型的值之间的关联存储在集合中。


有没有命令,他们可能会以不同走出来比并投入,

这与NSSet中。


编辑:


NSDictionary

词典收集键值对。NSDictionary不仅可以简单地维护对象的有序或无序集合,还可以根据给定的密钥存储对象,然后将其用于检索。


目前还 没有任何订单,但没有对打印排序进行调试。


查看完整回答
反对 回复 2019-10-21
?
翻翻过去那场雪

您无法对字典进行排序,但是可以对它的键进行排序并按以下步骤循环遍历:


let myDictionary = ["name1" : "Loy", "name2" : "Roy", "name3" : "Tim", "name4" : "Steve"]   // ["name1": "Loy", "name2": "Roy", "name3": "Tim", "name4": "Steve"]



let sorted = myDictionary.sorted {$0.key < $1.key}  // or {$0.value < $1.value} to sort using the dictionary values

print(sorted) // "[(key: "name1", value: "Loy"), (key: "name2", value: "Roy"), (key: "name3", value: "Tim"), (key: "name4", value: "Steve")]\n"

for element in sorted {

    print("Key = \(element.key) Value = \(element.value)" )

}


查看完整回答
反对 回复 2019-10-21
?
精慕HU

无论是NSDictionary也Swift::Dictionary令它的存储。区别在于某些NSDictionary对象在打印时会对其输出进行排序,而Swift::Dictionary不会。


从以下文档中-[NSDictionary description]:


如果字典中的每个键都是一个NSString对象,则按键升序列出条目,否则未定义条目的列出顺序。此属性旨在产生可读输出,用于调试目的,而不是用于序列化数据。


查看完整回答
反对 回复 2019-10-21

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信