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

Kotlin:如何用Lambda或扩展函数替代双循环实现单字母密码加密?

优化单字母密码加密:用Kotlin高阶函数替代双层循环

嘿,这个需求太常见啦!你当前的双层循环确实能实现功能,但用Kotlin的函数式特性可以让代码更简洁、性能也更好。核心思路是先把字母映射关系转换成Map,然后借助高阶函数快速完成字符替换,完全不需要嵌套循环~

优化后的代码实现

fun encrypt(message: String) {
    val alphabets = ('A'..'Z').toList()
    val shuffAlp = alphabets.shuffled()
    // 将字母对直接转换为Map,实现O(1)时间复杂度的查找
    val encryptionMap = alphabets.zip(shuffAlp).toMap()
    
    // 用map高阶函数遍历消息字符,直接查找映射,最后拼接成字符串
    val encryptedMessage = message.map { encryptionMap[it] ?: it }.joinToString("")
    
    println(encryptedMessage) // 对应你假设的shuffle结果,依然输出DLNJ
}

为什么这样更优?

  • 性能提升:原来的双层循环是O(n²)的时间复杂度(n是消息长度+字母表长度),换成Map后查找是O(1),整体复杂度降到O(n),消息越长优势越明显
  • 代码可读性:用map和joinToString替代嵌套循环,逻辑一目了然,别人看代码能快速理解“把每个字符换成映射后的字符,再拼起来”
  • 灵活性:如果后续需要支持小写字母、数字甚至符号,只需要扩展alphabets的范围,Map的映射逻辑完全不用改

额外扩展:支持大小写的版本(可选)

如果你的消息可能包含小写字母,可以轻松扩展代码:

fun encryptWithCase(message: String) {
    val alphabets = ('A'..'Z') + ('a'..'z')
    val shuffAlp = alphabets.shuffled()
    val encryptionMap = alphabets.zip(shuffAlp).toMap()
    
    val encryptedMessage = message.map { encryptionMap[it] ?: it }.joinToString("")
    println(encryptedMessage)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:27:47