Swift 字典初始化(分组:按:),2级-简化代码
Swift 字典初始化(分组:按:),2级-简化代码,swift,dictionary,functional-programming,swift5,Swift,Dictionary,Functional Programming,Swift5,Dictionary(init(grouping:by:)在我需要按某些属性对数组元素进行分组时工作正常 我得到的是: { key1: [ value1, value2, value3 ], key2: [ value4, value5, value6 ] } 但是,我需要进一步转换阵列,将每个分区分组为更小的组,以便生成的数据结构具有两层: {
Dictionary(init(grouping:by:)
在我需要按某些属性对数组元素进行分组时工作正常
我得到的是:
{
key1: [
value1,
value2,
value3
],
key2: [
value4,
value5,
value6
]
}
但是,我需要进一步转换阵列,将每个分区分组为更小的组,以便生成的数据结构具有两层:
{
key1: {
anotherKey1: [
value1,
],
anotherKey2: [
value2,
value3]
},
key1: {
anotherKey3: [
value4,
],
anotherKey4: [
value5,
value6]
},
}
实现这一结果的最简单方法是什么?目前,我必须迭代第一个字典初始值设定项调用的结果:
let grouped = Dictionary(grouping: Array(source), by: {$0.key1)
var grouped2 = [KeyType1 : [KeyType2? : [ValueType]]]()
for pair in grouped {
if let key = pair.key {
grouped2[key] = Dictionary(grouping: pair.value, by: {$0.key1})
}
}
print(grouped2)
这正是我想要的结果:两级数组字典
但我怀疑,有一种更简单的方法可以实现相同的结果,而无需手动对每个键/值对进行交互。您可以通过执行
init(grouping:by:)
调用,然后执行mapValues
调用,将每个“组”进一步映射到另一个字典中。这个字典将由init(grouping:by:)
再次创建,使用第二个分组键
i、 e
例如,要将一组数字首先按其%2
值分组,然后按其%4
值分组:
let source = [1,2,3,4,5,6,7,8,9,10,11,12,13]
let grouped = Dictionary(grouping: source, by: { $0 % 2 })
.mapValues { Dictionary.init(grouping: $0, by: { $0 % 4 }) }
print(grouped)
您可以通过执行
init(grouping:by:)
调用,然后执行mapValues
调用来实现这一点,该调用进一步将每个“组”映射到另一个字典中。这个字典将由init(grouping:by:)
再次创建,使用第二个分组键
i、 e
例如,要将一组数字首先按其%2
值分组,然后按其%4
值分组:
let source = [1,2,3,4,5,6,7,8,9,10,11,12,13]
let grouped = Dictionary(grouping: source, by: { $0 % 2 })
.mapValues { Dictionary.init(grouping: $0, by: { $0 % 4 }) }
print(grouped)
我无法测试这一点,因为您没有提供任何可使用的测试数据,但您可以使用
mapValues
解决您的问题。我无法测试这一点,因为您没有提供任何可使用的测试数据,但您可以使用mapValues
解决您的问题。