【问题标题】:Returning a sorted Swift Dictionary as parameter返回一个排序的 Swift 字典作为参数
【发布时间】:2018-08-12 16:17:15
【问题描述】:

我有一个函数,我想返回一个排序的字典

func sortDictonary()->[Int:String]
{
    let dic:[Int:String] = [ 1:"B", 0:"A", 2:"C" ]
    let sorted = dic.sorted(by: {$0.0 < $1.0} )
    return sorted
}

但是我得到如下错误:

Cannot convert return expression of type '[(key: Int, value: String)]' to return type '[Int : String]'

如何将已排序的项目转换为标准字典

【问题讨论】:

标签: swift dictionary


【解决方案1】:

我想返回一个排序好的字典

别再想要那个了。没有排序字典之类的东西。您正在做的事情创建了一个 对数组,该数组按对中的第一个排序(实际上,曾经是字典中的键),这是最好的。

func sortDictonary()->[(Int,String)]
{
    let dic:[Int:String] = [ 1:"B", 0:"A", 2:"C" ]
    let sorted = dic.sorted(by: {$0.0 < $1.0} )
    return sorted
}

【讨论】:

  • 有排序的字典数据结构...不在标准库中,出于某种疯狂的原因,但它们无处不在。
  • @Alexander 可能是这样,但我发现大多数说他们需要排序字典的人实际上并不需要。通常他们只是对字典的打印顺序或类似的顺序感到失望......
  • 是的,虽然它是完全明智的,例如,有一个基于字典的表(标题是键,映射到该标题下的项目数组)同时仍然保持恒定的时间查找。
  • @Alexander 我不明白为什么。通常的表数据源模型是一个节数组,每个节都包含一个行数组,并且由于您将被要求按索引号提供信息,因此数组是有意义的。按索引在数组中查找并不比按键在字典中查找差;事实上,它可能更好,因为我们可以直接进入内存中的位置。数组是一个连续的缓冲区,而不是某种双链表,每次访问都需要遍历(参见stackoverflow.com/a/27945725/341994)。
  • 我知道,但大多数模型的结构都如我所述。拥有一组“节”对象,每个对象都包含一组子对象,在表源之外并不常见。能够将一些 API 的输出解析为排序的 dict,并具有确定性的基于索引的查找,这将是理想的
猜你喜欢
  • 2021-09-23
  • 2019-09-18
  • 2021-07-30
  • 2018-01-02
  • 2019-01-23
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多