Swift统计字符串重复字符及次数代码运行异常求解
代码问题诊断
- 核心错误1:遍历过程中遇到第一个已存在的字符就直接执行
return中断函数,完全没有完成全量字符的统计,你测试输入geeksforgeeks第二个字符是e,第二次遇到e的时候就直接返回["e":1],和你得到的运行结果完全吻合 - 核心错误2:计数逻辑错误,只有字符不存在于字典时才会执行赋值操作,字符重复出现时没有做计数累加
修正后的实现代码
func letters(inputs: String)->[Character:Int] { var result = [Character:Int]() for input in inputs { // 重复字符直接累加计数,不存在的字符默认从0开始+1 result[input, default: 0] += 1 } // 如果只需要返回出现次数≥2的重复字符,放开下面这行过滤即可 // return result.filter { $0.value >= 2 } return result } print(letters(inputs:"geeksforgeeks"))
适配Python使用习惯的说明
- Swift字典的
[key, default: defaultValue]写法和Python字典的get(key, defaultValue)逻辑完全一致,你有Python开发基础可以直接类比理解 - 代码里的
filter过滤逻辑和Python的filter函数用法逻辑类似,开启后会仅保留出现次数≥2的重复字符
运行结果说明
调用letters(inputs:"geeksforgeeks")会得到完整的字符计数结果:["g":2, "e":4, "k":2, "s":2, "f":1, "o":1, "r":1],开启过滤逻辑后会返回符合要求的重复字符统计结果:["g":2, "e":4, "k":2, "s":2]
内容的提问来源于stack exchange,提问作者Tom Hiddleston
相关产品推荐
相关产品推荐

