Eu tenho um NSSet
(from CoreData
) contendo propriedades Element
a column
e row
(ambos Int16
).
Quero converter isso com eficiência NSSet
em um array de array [[Element]]
(seria um array de colunas e o valor seria um array de linhas nas colunas) de forma que ele lide com buracos nas coordenadas e respeite a ordem.
Por exemplo, se eu tiver os seguintes elementos:
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]
]
Tentei várias soluções como Dictionary(grouping: ..)
, reduce
, etc ... mas não consigo fazer funcionar corretamente.
O código não compila.
Dictionary(grouping:by:)
é de fato um caminho possível.Set<Element>
column
propriedade e obtenha ovalues
id
valores e classifique a matriz externa pelo seu primeiro itemou com
reduce(into:)
Ou você pode obter uma matriz aninhada de
Element
, a matriz interna classificada por linha e a externa por coluna.