【问题标题】:swift returning wrong index of dictionary快速返回错误的字典索引
【发布时间】:2015-12-22 08:19:36
【问题描述】:

我有这个简单的代码:

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

我猜它应该返回 25 因为字典第一个索引处的第一个键 if 25 。但奇怪的是它返回 35 。

怎么了?

谢谢

【问题讨论】:

  • 正常,不是有序数据集。stackoverflow.com/questions/1295459/…
  • 字典是无序的键值表示。所以不打印字典的第一个值是正常的。
  • 你想达到什么目的。你先知道字典和数组和有序dic的基本区别

标签: swift swift2 nsdictionary


【解决方案1】:

试试

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

【讨论】:

  • 我不想更改索引。我想要特定索引处的键和值。您的代码不会与索引混淆吗?
  • @sali 你一开始就没有索引。
【解决方案2】:

来自Swift Doc

字典

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

的键值对集合

因此,通过使用字典文字创建 Dictionary,很可能顺序不同。

【讨论】:

    【解决方案3】:

    您似乎假设字典是有序的,但事实并非如此。请参阅 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 提供了三种主要的集合类型,已知 作为数组、集合和字典,用于存储值的集合。 数组是值的有序集合。集合是无序的 独特价值的集合。 字典是无序的集合 键值关联。

    【讨论】:

      猜你喜欢
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-11
      相关资源
      最近更新 更多