如何在 swift 4 中获取结构的分组数组?
How to get grouped array of struct in swift 4?
我有一个结构数组,其中两个或多个元素的 ingredientId 可以相同。相同的代码如下:
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)
我期望的输出是一个数组,其中的元素根据相同的 ingredientId 分组,例如
[
[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.: 成分 ID 不固定,我们没有单独的数组。
如何使用高阶函数实现这个?
您可以使用 Dictionary
公开的 grouped
API 将您的数组转换为按 ingredientId
分组的 Carts
的字典;
let groupedDictionary = Dictionary(grouping: array) { [=10=].ingredientId }
如果您随后需要将该字典转换为数组;
let twoDimensionalArray = groupedDictionary.map { [=11=].value }
我有一个结构数组,其中两个或多个元素的 ingredientId 可以相同。相同的代码如下:
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)
我期望的输出是一个数组,其中的元素根据相同的 ingredientId 分组,例如
[ [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.: 成分 ID 不固定,我们没有单独的数组。
如何使用高阶函数实现这个?
您可以使用 Dictionary
公开的 grouped
API 将您的数组转换为按 ingredientId
分组的 Carts
的字典;
let groupedDictionary = Dictionary(grouping: array) { [=10=].ingredientId }
如果您随后需要将该字典转换为数组;
let twoDimensionalArray = groupedDictionary.map { [=11=].value }