Swift函数式反转单词:隔词反转的实现困惑
解决隔词反转的函数式实现思路
你遇到的问题其实很常见——普通的map只处理单个元素,但隔词反转需要知道每个单词的位置(索引),这正是你之前忽略的点!函数式编程里不是只能用无状态的map,我们可以借助enumerated()来获取每个元素的索引,再结合条件判断实现交替反转。
先基于你已有的全单词反转代码做改造:
import UIKit let input = "This is a sample sentence" func reverseEveryOtherWord(input: String) -> String { let parts = input.components(separatedBy: " ") // 使用enumerated()获取每个元素的索引和对应单词 let processed = parts.enumerated().map { index, word in // 这里判断:索引为偶数(从0开始)的单词反转,奇数的保持原样 // 如果你想反转奇数索引的单词,改成index % 2 == 1即可 index % 2 == 0 ? String(word.reversed()) : word } return processed.joined(separator: " ") } reverseEveryOtherWord(input: input) // 输出结果:"sihT is a elpmas sentence"
关键细节解释:
enumerated()会把数组转换成(offset: Int, element: String)的序列,这样我们就能拿到每个单词的位置索引。- 在
map里加入条件判断,根据索引的奇偶性决定是否反转单词,全程不需要循环,完全符合函数式编程的无状态转换特性。 - 如果你需要其他“隔词反转”规则(比如从第二个单词开始反转),只需要调整
index % 2的判断条件即可,非常灵活。
内容的提问来源于stack exchange,提问作者user9470831
相关产品推荐
相关产品推荐

