У меня есть массив структур, в которых componentId может быть одинаковым для двух или более элементов. Код для того же, как показано ниже:
struct Cart {
var bundleId: Int = 0
var ingredientId: Int = 0
}
var array:[Cart] = []
array.append(Cart(bundleId: 1, ingredientId: 1))
array.append(Cart(bundleId: 2, ingredientId: 2))
array.append(Cart(bundleId: 3, ingredientId: 2))
array.append(Cart(bundleId: 4, ingredientId: 5))
array.append(Cart(bundleId: 5, ingredientId: 5))
array.append(Cart(bundleId: 6, ingredientId: 6))
print(array)
В качестве вывода я ожидаю массив с элементами, сгруппированными по одному и тому же идентификатору ингредиента, например.
[ [Cart(bundleId: 1, ingredientId: 1)], [Cart(bundleId: 2, ingredientId: 2),Cart(bundleId: 3, ingredientId: 2)], [Cart(bundleId: 4, ingredientId: 5),Cart(bundleId: 5, ingredientId: 5)], [Cart(bundleId: 6, ingredientId: 6)], ............ ....... ]
P.S .: идентификаторы ингредиентов не фиксированы, и у нас нет для них отдельного массива.
Как добиться этого с помощью функций высшего порядка?
@Larme: это мне очень помогло. Спасибо





Вы можете использовать API grouped, предоставляемый Dictionary, для преобразования вашего массива в словарь Carts, сгруппированный по ingredientId;
let groupedDictionary = Dictionary(grouping: array) { $0.ingredientId }
Если вам нужно преобразовать этот словарь в массив;
let twoDimensionalArray = groupedDictionary.map { $0.value }