如何将指定Swift字典拆分并映射到三个Category类实例?
Swift: 将字典键值对分组分配给自定义类实例
首先得提个关键点:Swift 5.7之前的字典是无序的,5.7及以后版本才会保留插入顺序。所以我们第一步要确保能按你给定的字典字面量顺序获取键值对,再处理分组分配逻辑。
另外,你给出的Category类目前只能存储单个name和note,没办法直接存放多个键值对。这里我会提供两种实现方案,对应两种不同的需求理解:
方案一:每个Category实例存储一组键值对(更贴合“分配多组键值对给一个实例”的描述)
先调整Category类,添加一个属性来存储该分组下的所有条目:
class Category { var name: String var entries: [String: Int] = [:] // 用于存储分组内的所有键值对 // 新增初始化方法,方便设置分组名称 init(name: String) { self.name = name } }
接下来处理字典和分组逻辑:
// 你的原始字典 var dict = ["Steve": 17, "Marc": 38, "Xavier": 21, "Rolf": 45, "Peter": 67, "Nassim" : 87, "Raj": 266, "Paul": 220, "Bill": 392] // 将字典转换为有序的键值对数组(Swift 5.7+保留插入顺序) let allKeyValuePairs = Array(dict) // 分割数组为三个部分:前3个、中间3个、最后3个 let juniorPairs = Array(allKeyValuePairs[0..<3]) let intermediatePairs = Array(allKeyValuePairs[3..<6]) let seniorPairs = Array(allKeyValuePairs[6..<9]) // 创建三个Category实例 let junior = Category(name: "Junior") let intermediate = Category(name: "Intermediate") let senior = Category(name: "Senior") // 将分割后的键值对转换回字典,赋值给对应实例 junior.entries = Dictionary(uniqueKeysWithValues: juniorPairs) intermediate.entries = Dictionary(uniqueKeysWithValues: intermediatePairs) senior.entries = Dictionary(uniqueKeysWithValues: seniorPairs)
你可以打印每个实例的entries属性,就能看到对应的分组键值对了。
方案二:每个键值对对应一个Category实例,按分组存放到数组中(严格遵循你给出的Category类定义)
如果你希望完全保留原Category类的结构,我们可以为每个键值对创建一个Category实例,再把它们分到三个分组数组里:
// 你给出的原始Category类 class Category { var name = "" var note = 0 } // 你的原始字典 var dict = ["Steve": 17, "Marc": 38, "Xavier": 21, "Rolf": 45, "Peter": 67, "Nassim" : 87, "Raj": 266, "Paul": 220, "Bill": 392] // 转换为有序的键值对数组 let allKeyValuePairs = Array(dict) // 定义三个分组数组,用来存放对应Category实例 var juniorGroup: [Category] = [] var intermediateGroup: [Category] = [] var seniorGroup: [Category] = [] // 填充前3个键值对到juniorGroup for pair in allKeyValuePairs[0..<3] { let category = Category() category.name = pair.key category.note = pair.value juniorGroup.append(category) } // 填充中间3个到intermediateGroup for pair in allKeyValuePairs[3..<6] { let category = Category() category.name = pair.key category.note = pair.value intermediateGroup.append(category) } // 填充最后3个到seniorGroup for pair in allKeyValuePairs[6..<9] { let category = Category() category.name = pair.key category.note = pair.value seniorGroup.append(category) }
这样每个分组数组里就会有3个Category实例,分别对应字典里的键值对。
内容的提问来源于stack exchange,提问作者jaykaydev
相关产品推荐
相关产品推荐

