为什么 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")
}
答案 0 :(得分:0)
正如亚历山大在其评论中所说,词典是无序的集合。他们没有任何特定的命令。如果要订购,请使用结构数组。数组 do 保留顺序。
答案 1 :(得分:0)
如果您选项-单击Dictionary
,则弹出窗口将详细介绍Dictionary
。
Apple文档中的三个关键点:
- 每本词典都是键值对的无序集合。
- 字典中键/值对的顺序在突变之间是稳定的,但否则是不可预测的。
- 如果您需要有序的键值对集合,并且不需要Dictionary提供的快速键查找,请参见
KeyValuePairs
类型以供选择。
选项-单击KeyValuePairs
会产生(我添加了编号):
- 在需要的有序集合时,请使用
KeyValuePairs
实例 键值对,并且不需要快速键查找 提供Dictionary
类型。- 与真实词典中的键/值对不同,
KeyValuePairs
实例的键和值都必须不符合 遵守Hashable
协议。- 您初始化一个
KeyValuePairs
实例 使用Swift字典文字。- 除了保持顺序 原始字典文字
KeyValuePairs
也允许重复 键。
以下是您使用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
。