排序数组返回字典

时间:2021-07-14 10:52:12

标签: ios swift

我有以下对象:

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

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

我是这样做的:

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

这确实按 key (Int) 值对内容进行了完美排序,但我无法将 datasource 设置为 sorted 属性。

Xcode 出现以下错误

<块引用>

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

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

谢谢。

2 个答案:

答案 0 :(得分:1)

let datasource: [Int: [MyCustomModel]] = [:]

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

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

Swift 5.5

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

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

答案 1 :(得分: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 数组做任何事情。就像排序、过滤一样,你也可以在任何你想要的地方使用这个数组而不是字典。

相关问题