【问题标题】:Dictionary print key and value in Swift 4 [duplicate]Swift 4中的字典打印键和值[重复]
【发布时间】:2018-06-21 12:50:02
【问题描述】:

您好,我在 Xcode9 上尝试了打印字典项目。像这样:

var items = ["Bear":"0", "Glass":"1", "Car":"2"]

for (key,value) in items{

print("\(key) : \(value)")

}

输出:

Glass : 1
Bear : 0
Car : 2

为什么输出不是这样:Bear: 0, Glass:1, Car:2 我不明白这个输出原因。

【问题讨论】:

  • 字典类型未排序。
  • 您可以改为对字典进行排序。见this answer

标签: swift dictionary


【解决方案1】:

字典:

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

每个值都与一个唯一键相关联,该键充当字典中该值的标识符。与数组中的项目不同,字典中的项目没有指定的顺序

数组 - 数组将相同类型的值存储在有序列表中。

集合 - 集合将相同类型的不同值存储在集合中,没有定义顺序

来自Apple documentation

【讨论】:

    【解决方案2】:

    Dictionary 在 Swift 中被实现为哈希映射。无法保证Dictionary 中的项目与您添加它们的顺序相同。

    唯一保留项目顺序的容器是Array。您可以使用它来存储元组,如下所示:

    var items : [(key: String, value: String)] = [(key: "Bear", value: "0"),(key: "Glass", value: "1"), (key: "Car", value: "2")]
    

    您的迭代将按预期工作,但您将失去 Dictionary's 按下标查找项目的能力

    【讨论】:

    • 你能举个例子吗?
    • 你的问题就是你的榜样@Mayday
    • @BhavinRamani 是的,对 :) 订购商品的示例。如何订购?
    【解决方案3】:
    • Arrays 是有序的值集合。
    • Sets 是唯一值的无序集合。
    • Dictionaries 是无序的 键值关联的集合。

    因此,当您从 Dictionary 中迭代值时,您不能期望相同的顺序。

    Reference to Collection Type

    【讨论】:

      【解决方案4】:

      Dictionary 集合不是有序的,即 它根本不保证是有序的。但是Array 是。 Dictionary 以离散顺序添加值,而Array 以连续顺序添加值。

      你根本不可能有这样的Array

      ["a", "b", ... , "d", ... , ... , "g"]    //Discrete index aren't allowed. You just can't skip any index in between.
      

      相反,您必须拥有像这样的上述数组:

      ["a", "b", "d", "g"] 
      

      为了能够摆脱这种行为,引入了Dictionary (您不必维护以前的索引即可获得值)。因此,您可以根据需要插入值。维护任何索引都不会打扰您。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-14
        • 2011-11-02
        • 2016-01-19
        • 2012-09-06
        • 1970-01-01
        • 2019-06-20
        • 1970-01-01
        相关资源
        最近更新 更多