我可以在不使用循环的情况下功能性地反转字符串中的每个单词,但是当我尝试反转其他每个单词时。我遇到了麻烦。我可以用一个循环来完成,但功能上不行。我在这里看不到什么?
功能上(每个词):

import UIKit

let input = "This is a sample sentence"

func reverseWords(input: String) -> String {
    let parts = input.components(separatedBy: " ")
    let reversed = parts.map { String($0.reversed()) }
    return reversed.joined(separator: " ")
}

reverseWords(input: input)

带循环(每隔一个字):
var sampleSentence = "This is a sample sentence"

func reverseWordsInSentence(sentence: String) -> String {
    let allWords = sampleSentence.components(separatedBy:" ")
    var newSentence = ""

    for index in 0...allWords.count - 1 {
        let word = allWords[index]
        if newSentence != "" {
            newSentence += " "
        }

        if index % 2 == 1 {
            let reverseWord = String(word.reversed())
            newSentence += reverseWord
        } else {
            newSentence += word
        }
    }
    return newSentence
}
reverseWordsInSentence(sentence: sampleSentence)

最佳答案

稍微修改一下你的reverseWords你就可以把其他单词都颠倒过来。使用enumerated()将单词与其位置组合,然后使用它来反转奇数单词:

let input = "one two three four five"

func reverseOddWords(input: String) -> String {
    let parts = input.components(separatedBy: " ")
    let reversed = parts.enumerated().map { $0 % 2 == 0 ? String($1.reversed()) : $1 }
    return reversed.joined(separator: " ")
}

print(reverseOddWords(input: input))

eno two eerht four evif

或者您可以在swift的sort之后对您的函数进行模式化,并将filter闭包传递给reverseWords函数:
let input = "one two three four five"

func reverseWords(_ input: String, using filter: ((Int) -> Bool) = { _ in true }) -> String {
    let parts = input.components(separatedBy: " ")
    let reversed = parts.enumerated().map { filter($0) ? String($1.reversed()) : $1 }
    return reversed.joined(separator: " ")
}

// default behavior is to reverse all words
print(reverseWords("one two three four five"))

eno owt eerht ruof evif

print(reverseWords("one two three four five", using: { $0 % 2 == 1 }))

one owt three ruof five

print(reverseWords("one two three four five", using: { [0, 3, 4].contains($0) }))

eno two three ruof evif

let everyThirdWord = { $0 % 3 == 0 }

print(reverseWords("one two three four five", using: everyThirdWord))

eno two three ruof five

关于swift - Swift中功能上的单词反转,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50125933/

10-09 00:22
查看更多