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

Swift嵌套字典技术问题:如何根据玩家名计算总积分

如何计算Swift嵌套字典中玩家的总积分?

没问题,我来帮你搞定这个嵌套字典的积分计算问题!首先咱们先明确需求:你有一个[String: [String: Double]]类型的嵌套字典(外层键是玩家名,内层字典是运动项目对应Double类型的积分),需要写一个函数,传入玩家名后返回该玩家所有积分的总和。

第一步:先看示例数据

先定义一个符合你需求的嵌套字典例子,方便后续演示:

// 示例:玩家 -> [运动项目: 积分]
let playerSportScores: [String: [String: Double]] = [
    "Alice": ["Basketball": 15.5, "Tennis": 8.0, "Swimming": 12.2],
    "Bob": ["Football": 20.0, "Basketball": 10.5],
    "Charlie": ["Running": 5.8]
]

第二步:核心函数实现

这里写一个简洁且安全的函数,处理玩家不存在的边界情况:

func calculateTotalPlayerScore(for playerName: String, from scoreDictionary: [String: [String: Double]]) -> Double {
    // 1. 安全获取该玩家对应的运动积分字典,不存在直接返回0.0
    guard let sportScores = scoreDictionary[playerName] else {
        return 0.0
    }
    
    // 2. 提取所有积分值,用reduce累加得到总和
    let totalScore = sportScores.values.reduce(0.0, +)
    
    return totalScore
}

第三步:函数调用演示

咱们来测试一下这个函数的效果:

// 计算Alice的总积分
let aliceTotal = calculateTotalPlayerScore(for: "Alice", from: playerSportScores)
print("Alice的总积分:\(aliceTotal)") // 输出:35.7

// 计算Bob的总积分
let bobTotal = calculateTotalPlayerScore(for: "Bob", from: playerSportScores)
print("Bob的总积分:\(bobTotal)") // 输出:30.5

// 处理不存在的玩家(比如Dave)
let daveTotal = calculateTotalPlayerScore(for: "Dave", from: playerSportScores)
print("Dave的总积分:\(daveTotal)") // 输出:0.0

进阶:处理可选积分的情况

如果你的内层字典积分是可选类型(比如[String: Double?]),可以稍微调整函数,过滤掉nil值再计算:

func calculateTotalScoreWithOptionalValues(for playerName: String, from scoreDictionary: [String: [String: Double?]]) -> Double {
    guard let sportScores = scoreDictionary[playerName] else {
        return 0.0
    }
    
    // 先用compactMap去掉nil的积分,再累加
    let totalScore = sportScores.values.compactMap { $0 }.reduce(0.0, +)
    return totalScore
}

关键要点总结

  • 用guard let处理可选值:避免因为玩家不存在导致的崩溃,同时提供默认返回值(这里用0.0,你也可以改成返回Double?或者抛出错误,看需求)。
  • 利用字典的values属性:快速获取所有积分值,不用手动遍历键值对。
  • reduce方法:Swift标准库中专门用来累加/聚合序列的工具,简洁高效。

内容的提问来源于stack exchange,提问作者YourWorstNightmare

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:54:15