swift返回错误的字典索引

时间:2015-12-22 08:19:36

标签: swift swift2 nsdictionary

我有这个简单的代码:

var dic = [25:"first" , 35 : "second"  , 55 : "third"]
let firstKey = Array(dic.keys)[0] // or .first
print (firstKey)

我猜它会返回25,因为如果是25,那么字典第一个索引处的第一个键。但奇怪的是它返回35。

怎么了?

由于

3 个答案:

答案 0 :(得分:0)

尝试

let firstKey = Array(dic.keys).sort()[0]

答案 1 :(得分:0)

来自Swift Doc

  

<强>词典

     

从Key到Value实例的基于哈希的映射。也是没有定义排序

的键值对的集合

因此,通过使用字典文字创建Dictionary,订购很可能不一样。

答案 2 :(得分:0)

您似乎假设字典是有序的,而不是。请参阅Swift编程语言指南的Collection Types部分。这是什么意思?这意味着无保证值或密钥以您创建它们的顺序存储。您唯一的保证是通过它的键访问值将返回该值。

如果您需要按给定顺序访问您的密钥,则由您来提供该功能。

如果查看Swift Standard Library Reference,它会记录我们可以在字典上使用哪些方法。

您可以使用以下属性和函数来处理带字典的索引。

属性:

startIndex 
endIndex

功能

func indexForKey(_ key: Key) -> DictionaryIndex<Key, Value>?
func removeAtIndex(_ index: DictionaryIndex<Key, Value>) -> (Key, Value)

字典也符合indexable protocol

  

收集类型

     

Swift提供三种主要的集合类型,已知   用作存储值集合的数组,集合和字典。   数组是有序的值集合。集合是无序的   独特价值的集合。 字典是无序集合   关键值协会。