我可以在不使用循环的情况下在功能上反转字符串中的每个单词,但是当我尝试反转每个其他字时。我遇到了问题。我可以用循环但不是功能。我在这里看不到什么?
功能上(每个字):
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)
答案 0 :(得分:2)
使用stride()
生成每个其他单词的索引序列。
然后使用forEach()
选择stride数组中的每个索引,并使用它来改变该索引处的单词以反转它。
import UIKit
let string = "Now is the time for all good programmers to babble incoherently"
var words = string.components(separatedBy: " ")
stride(from: 0, to: words.count, by: 2)
.forEach { words[$0] = String(words[$0].reversed()) }
let newString = words.joined(separator: " ")
print(newString)
输出字符串为:
"woN is eht time rof all doog programmers ot babble yltnerehocni"
答案 1 :(得分:2)
稍微修改一下int c = (int)(dtp2.Value.Date-dtp1.Value.Date).TotalDays + 1;
DateTime[] d = new DateTime[c];
for (int i = 0; i < c; i++)
{
d[i] = dtp1.Value.Date.AddDays(i);
}
,你可以反转其他所有单词。使用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))
或者你可以在Swift的eno two eerht four evif
之后模拟你的函数,并将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))