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

Kotlin中如何生成字符串字符出现次数Map(不使用传统for循环)

在Kotlin中无传统for循环实现字符计数Map

嘿,这事儿在Kotlin里真的很简单,标准库给我们准备了现成的函数式工具,完全不用写那种老式的for循环!针对你给的"Hello World"字符串,我给你两种常用的实现方式:

方法一:用groupingBy + eachCount(最简洁)

这是最推荐的写法,一行代码就能搞定,而且可读性拉满:

val inputStr = "Hello World"
// 如果需要保留空格,直接用下面这行
val charCountMap = inputStr.groupingBy { it }.eachCount()
// 如果要去掉空格(和你给出的目标结果一致),先过滤空格再统计
val charCountMapWithoutSpace = inputStr.filter { it != ' ' }.groupingBy { it }.eachCount()

println(charCountMapWithoutSpace) // 输出 {H=1, e=1, l=3, o=2, r=1, d=1}

原理说明

  • groupingBy { it }:把字符串里的每个字符作为分组的键,也就是按字符本身分组
  • eachCount():自动统计每个分组里元素的数量,直接返回Map<Char, Int>类型的结果,完美符合你的需求

方法二:用fold函数(更灵活)

如果你想自定义初始化逻辑或者做更多中间处理,fold函数是个不错的选择,同样不需要写传统for循环:

val inputStr = "Hello World"
val charCountMap = inputStr.filter { it != ' ' }.fold(mutableMapOf<Char, Int>()) { accMap, currentChar ->
    // 用getOrDefault处理字符第一次出现的情况,默认计数为0
    accMap[currentChar] = accMap.getOrDefault(currentChar, 0) + 1
    accMap
}

println(charCountMap) // 同样得到目标结果

原理说明

  • fold接收两个参数:初始值(这里是一个空的MutableMap)和一个累加器函数
  • 累加器函数会遍历每个字符,更新Map里的计数:如果字符已经存在,计数加1;如果不存在,就设为1
  • 最后返回更新后的Map,完成统计

这两种方法都完全避开了传统的for循环写法,而且都是Kotlin函数式编程的典型用法,推荐第一种,因为最简洁高效!

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

相关产品推荐
方舟 Agent Plan

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

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