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

Swift中实现字典值出现次数统计的开发问题求助

问题修复方案

原代码存在的问题

  • 遍历主题字典时错误遍历了主题名的单个字符,不需要嵌套for key in topicKeys这层无效循环
  • 关键词匹配逻辑错误:原本的reviews.contains(val)是判断评论数组里有没有完全等于关键词的元素,正确逻辑应该是检查每条评论的文本内容是否包含关键词
  • 统计字典赋值时直接强制解包,首次赋值不存在对应key的情况下会直接崩溃
  • 最后打印结果时误用enumerated()方法,会输出数组索引而非主题名称

修复后的完整代码

import Foundation

func countOccurance(topics: [String : [String]], reviews: [String]) -> [String : Int] {
    var count: [String: Int] = [:]
    // 合并所有评论为整串方便匹配,也可单独遍历每条评论统计
    let allReviewContent = reviews.joined()
    // 遍历每个主题
    for (topicName, keywords) in topics {
        var topicCount = 0
        // 遍历当前主题对应的所有关键词
        for keyword in keywords {
            // 检查评论内容是否包含该关键词
            if allReviewContent.contains(keyword) {
                topicCount += 1
            }
        }
        // 使用默认值避免强制解包崩溃
        count[topicName, default: 0] += topicCount
    }
    return count
}

let topics = [
    "price" : ["cheap", "expensive", "price"],
    "business" : ["small", "medium", "large"]
]
let reviews = "large company with expensive items. Some are very cheap"
let result = countOccurance(topics: topics, reviews: [reviews])

// 正确打印统计结果
for (key,value) in result {
    print("\(key) : \(value)")
}

运行输出

完全符合你要求的预期结果:

price : 2
business : 1

如果需要统计关键词实际出现的总次数(比如同一关键词在评论里出现3次就算3次,而非匹配到就算1次),可以替换为正则匹配统计次数的逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:57:03