Swift中功能性词语的颠倒
我可以在不使用循环的情况下从功能上反转字符串中的每个单词,但是当我尝试反转其他每个单词时。我遇到了问题。我可以用一个循环来完成它,但在功能上不行。我在这里看不到什么 功能上(每个词): 带循环(每隔一个单词): 使用Swift中功能性词语的颠倒,swift,string,Swift,String,我可以在不使用循环的情况下从功能上反转字符串中的每个单词,但是当我尝试反转其他每个单词时。我遇到了问题。我可以用一个循环来完成它,但在功能上不行。我在这里看不到什么 功能上(每个词): 带循环(每隔一个单词): 使用stride() 然后使用forEach()选择步幅数组中的每个索引,并使用它在该索引处对单词进行变异以反转 import UIKit let string = "Now is the time for all good programmers to babble incohere
stride()
然后使用forEach()
选择步幅数组中的每个索引,并使用它在该索引处对单词进行变异以反转
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"
使用stride()
然后使用forEach()
选择步幅数组中的每个索引,并使用它在该索引处对单词进行变异以反转
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"
只要稍微修改一下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的排序
之后对函数进行模式化,并将过滤器
关闭传递给反向排序
函数:
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"))
只要稍微修改一下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的排序
之后对函数进行模式化,并将过滤器
关闭传递给反向排序
函数:
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"))
我建议您添加一个具有预期输出的示例输入。至少就我个人而言,你的问题有点不清楚,但举一个你想要实现的例子会对我有很大帮助。添加当前输出也会有帮助。“这是一个示例句子”看起来像这样:“这是一个elpmas句子”,每个单词都颠倒。两件事。首先,输出是什么(不是您所期望的,而是您的代码产生了什么)?第二,您是否设置了断点并实际查看了正在构建的输出?他发布了实现其目标的命令式代码,并要求提供等效函数版本的帮助。看看我的答案,安迪·伊巴内兹和dfd。。。上面的代码输出正确。我只是想找到一种方法,使用函数式编程将其他单词颠倒过来。我建议您添加一个具有预期输出的示例输入。至少就我个人而言,你的问题有点不清楚,但举一个你想要实现的例子会对我有很大帮助。添加当前输出也会有帮助。“这是一个示例句子”看起来像这样:“这是一个elpmas句子”,每个单词都颠倒。两件事。首先,输出是什么(不是您所期望的,而是您的代码产生了什么)?第二,您是否设置了断点并实际查看了正在构建的输出?他发布了实现其目标的命令式代码,并要求提供等效函数版本的帮助。看看我的答案,安迪·伊巴内兹和dfd。。。上面的代码输出正确。我只是想找到一种方法,用函数式编程把其他单词颠倒过来。你真的那么懒吗?看看你能不能自己把它转换成函数。你真的那么懒吗?看看你能不能自己把它转换成函数。哦,天哪!您创建了一个高阶函数来反转某些单词?你肯定会因此得到额外的积分。(投票)现在你可以输入斐波那契序列作为过滤器,如果你想的话!天哪!您创建了一个高阶函数来反转某些单词?你肯定会因此得到额外的积分。(投票)现在你可以输入斐波那契序列作为过滤器,如果你想的话!
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