You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将指定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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:01:50