NS 元素集,其坐标为列/行数组

问题描述 投票:0回答:1

我有一个

NSSet
(来自
CoreData
),其中包含
Element
以及
column
row
属性(都是
Int16
)。
我想有效地将这个
NSSet
转换为数组
[[Element]]
的数组(它将是列的数组,值将是列中的行的数组),以处理坐标中的漏洞并尊重订购。

例如,如果我有以下元素:

let mySet = NSSet([
    Element(column: 1, row: 1, id: 'el1'), 
    Element(column: 3, row: 0, id: 'el2),
    Element(column: 3, row: 2, id: 'el3'),
    Element(column: 6, row: 12, id: 'el4'),
    Element(column: 6, row: 6, id: 'el5),
    Element(column: 6, row: 1, id: 'el6')
]);
// I would get an array like:
let resultArray = [
  [el1],
  [el2, el3],
  [el6, el5, el4]
]

我尝试了各种解决方案,例如

Dictionary(grouping: ..)
reduce
等...但无法使其正常工作。

arrays swift group-by set nsset
1个回答
0
投票

代码无法编译。

Dictionary(grouping:by:)
确实是一个可行的方法。

  • 首先将集合转换为 Swift
    Set<Element>
  • 通过
    column
    属性将数组分组到字典中,并得到
    values
  • 最后将所有项目映射到
    id

let mapped = Dictionary(grouping: mySwiftSet, by: \.column)
    .values
    .map { items in
        items.map(\.id).sorted()
    }
© www.soinside.com 2019 - 2024. All rights reserved.