【问题标题】:Sorting Array returns a Dictionary排序数组返回一个字典
【发布时间】:2021-09-23 08:26:13
【问题描述】:

我有以下对象:

private var datasource: [Int: [MyCustomModel]] = [:]

稍后,我需要按key 属性(升序)对datasource 进行排序。

我是这样做的:

let sorted = datasource.sorted(by: {$0.key < $1.key})

虽然我无法将datasource 设置为sorted 属性,但它确实可以完美地按key (Int) 值对内容进行排序。

Xcode 出现以下错误

无法将类型“[Dictionary.Element]”(又名“Array”)的值分配给类型“[Int: [MyCustomModel]]”

我知道排序后返回的类型是字典而不是数组。 我该如何克服这个问题?

谢谢。

【问题讨论】:

  • "虽然我不能将数据源设置为排序属性" 你应该可以,除非你展示的不是你的真实代码。如果sorted[Int : [MyCustomModel]] 类型,为什么不改为[(key: Int, value: Array)]?字典只是没有排序,你不能改变它。
  • 您只想按键排序并希望结果为 [Int: [MyCustomModel]]。对吗?
  • 您的 object 是字典,而不是数组。字典根据定义是无序的。如果你要对字典进行排序,你会得到一个元组数组。
  • @JigneshMayani 没错。按键排序
  • @Sweeper 我会试试你提到的改变,看看它是否有效。

标签: ios swift


【解决方案1】:

我没有得到任何解决方案来对字典进行排序,但您可以执行以下操作。

它对我有用。

制作键和值的结构。

struct STRUCT_TEMP
{
    var key : Int
    var value : [MyCustomModel]
}

创建结构变量。

var structTemp : [STRUCT_TEMP] = []

将您的字典转换为如下结构:

self.structTemp = datasource.map({ STRUCT_TEMP(key: $0.key, value: $0.value) })

现在你可以对 structTemp 数组做任何事情了。就像排序、过滤一样,你也可以在任何你想要的地方使用这个数组而不是字典。

【讨论】:

  • 哦,这可能真的有效。我会试试这个。
  • @IvanCantarino 好的,如果您有任何错误或警告,请告诉我。
【解决方案2】:
let datasource: [Int: [MyCustomModel]] = [:]

字典无法排序!。如果使用sorted(by: { $0.key &lt; $1.key})datasource 进行排序,结果是一个数组,而不是字典。

datasource.sorted(by: { $0.key < $1.key})

斯威夫特 5.5

您可以使用 OrderedDictionary。它保持插入顺序。

https://www.advancedswift.com/ordereddictionary/

【讨论】:

    猜你喜欢
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2013-12-18
    相关资源
    最近更新 更多