为什么字典的for-in循环不顺序

时间:2019-05-11 18:25:16

标签: swift

为什么 for-in循环对于字典不是连续的

  let buffer = ''; // buffer for constructing the barcode from key presses

  document.addEventListener('keypress', event => {
    let data = buffer || '';
    if (event.key !== 'Enter') { // barcode ends with enter -key
      data += event.key;
      buffer = data;
    } else {
      buffer = '';
      console.log(data); // ready barcode ready for a use
    }
  });

OutPut。

let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in numberOfLegs {
    print("\(animalName)s have \(legCount) legs")
}

2 个答案:

答案 0 :(得分:0)

正如亚历山大在其评论中所说,词典是无序的集合。他们没有任何特定的命令。如果要订购,请使用结构数组。数组 do 保留顺序。

答案 1 :(得分:0)

如果您选项-单击Dictionary,则弹出窗口将详细介绍Dictionary

Apple文档中的三个关键点:

  
      
  1. 每本词典都是键值对的无序集合
  2.   
  3. 字典中键/值对的顺序在突变之间是稳定的,但否则是不可预测的。
  4.   
  5. 如果您需要有序的键值对集合,并且不需要Dictionary提供的快速键查找,请参见   KeyValuePairs类型以供选择。
  6.   

选项-单击KeyValuePairs会产生(我添加了编号):

  
      
  1. 在需要的有序集合时,请使用KeyValuePairs实例   键值对,并且不需要快速键查找   提供Dictionary类型。
  2.   
  3. 与真实词典中的键/值对不同,   KeyValuePairs实例的键和值都必须不符合   遵守Hashable协议。
  4.   
  5. 您初始化一个KeyValuePairs实例   使用Swift字典文字。
  6.   
  7. 除了保持顺序   原始字典文字KeyValuePairs也允许重复   键。
  8.   

以下是您使用KeyValuePairs的示例:

let numberOfLegs: KeyValuePairs = ["spider": 8, "ant": 6, "cat": 4]

// Now this gives the order you expect
for (animalName, legCount) in numberOfLegs {
    print("\(animalName)s have \(legCount) legs")
}

输出:

spiders have 8 legs
ants have 6 legs
cats have 4 legs
// But KeyValuePairs cannot be used for fast key lookup like a Dictionary
// If you don't have duplicate keys, you can convert the KeyValuePairs
// to Dictionary like this for normal lookup operations
let numberOfLegsDict = Dictionary(uniqueKeysWithValues: numberOfLegs.map {(key: $0, value: $1)})

注意:KeyValuePairs在Swift 4.2和更早版本中被称为DictionaryLiteral