带Xcode的简单Swift函数
我试图编写一个简单的函数,但遇到了一些问题。函数的目的是提取一个字符串,如果字符串不是以辅音开头,则删除每个元音,直到到达第一个辅音为止。例如,如果给定字符串为“eat”,则函数将返回“t”。如果给定的字符串是“awesome”,它将返回“wesome”带Xcode的简单Swift函数,swift,string,xcode,function,Swift,String,Xcode,Function,我试图编写一个简单的函数,但遇到了一些问题。函数的目的是提取一个字符串,如果字符串不是以辅音开头,则删除每个元音,直到到达第一个辅音为止。例如,如果给定字符串为“eat”,则函数将返回“t”。如果给定的字符串是“awesome”,它将返回“wesome” 下面是我的代码,它编译没有错误,但我无法获得所需的输出。现在它只输出一个空字符串。非常感谢您的建议,谢谢。位置下方的两行无效 let firstCharacter = lyricalworld[lyricalworld.startIndex
下面是我的代码,它编译没有错误,但我无法获得所需的输出。现在它只输出一个空字符串。非常感谢您的建议,谢谢。位置下方的两行无效
let firstCharacter = lyricalworld[lyricalworld.startIndex]
let str = String(firstCharacter)
请把它放在门里面
for _ in lyricalworld {
let firstCharacter = lyricalworld[lyricalworld.startIndex]
let str = String(firstCharacter)
if vowelArray.contains(str){
lyricalworld.remove(at: lyricalworld.startIndex)
}
}
完整来源
func removeFirstLetter(word: String) -> String{
var lyricalworld = word
let vowelArray = ["a", "e", "i", "o", "u", "y"]
for _ in lyricalworld {
let firstCharacter = lyricalworld[lyricalworld.startIndex]
let str = String(firstCharacter)
if vowelArray.contains(str){
lyricalworld.remove(at: lyricalworld.startIndex)
}
}
return lyricalworld
}
这将是正确而有效的解决方案:
func removeFirstLetter(word: String) -> String {
var lyricalWord = word
let vowelArray = ["a", "e", "i", "o", "u", "y"]
for _ in lyricalWord {
// We are moving these to the loop so every time we get updated first character
var firstCharacter = lyricalWord[lyricalWord.startIndex]
var str = String(firstCharacter)
if vowelArray.contains(str) {
lyricalWord.remove(at: lyricalWord.startIndex)
} else {
// If this time the first character is consonant that means our string is ready and we can return it and finish the loop
return lyricalWord
}
}
return lyricalWord
}
print(removeFirstLetter(word: "aeiouty"))
但它甚至可以改进强>
func removeFirstLetter(word: String) -> String{
var lyricalworld = word
let vowelArray = ["a", "e", "i", "o", "u", "y"]
for _ in lyricalworld {
let firstCharacter = lyricalworld[lyricalworld.startIndex]
let str = String(firstCharacter)
if vowelArray.contains(str){
lyricalworld.remove(at: lyricalworld.startIndex)
}
}
return lyricalworld
}
在循环中,您每次都要遍历整个元音数组。但是,您有一个很好的结构,名为Set,其工作原理类似于。
简单地说,虽然函数“contains():”调用数组6次以将字母与每个元音进行比较,但使用Set的相同实现只进行1次调用(不总是,但大多数情况下)!当你有更多的数据可供比较时,这是特别有利可图的
因此,下面是使用设置的实现:
func removeFirstLetter(word: String) -> String {
var lyricalWord = word
let vowelArray: Set<String> = ["a", "e", "i", "o", "u", "y"] // The only change is here!
for _ in lyricalWord {
var firstCharacter = lyricalWord[lyricalWord.startIndex]
var str = String(firstCharacter)
if vowelArray.contains(str) {
lyricalWord.remove(at: lyricalWord.startIndex)
} else {
return lyricalWord
}
}
return lyricalWord
}
print(removeFirstLetter(word: "aeiouty"))
func removeFirstLetter(单词:String)->String{
var lyricalWord=word
让元音数组:Set=[“a”、“e”、“i”、“o”、“u”、“y”]//唯一的变化就在这里!
歌词中的uuu{
var firstCharacter=lyricalWord[lyricalWord.startIndex]
var str=字符串(第一个字符)
如果元音数组包含(str){
删除(位于:lyricalWord.startIndex)
}否则{
返回歌词
}
}
返回歌词
}
打印(删除第一个字母(单词:“aeiouty”))
请将您的代码作为文本包含在问题中。文本更容易阅读,也可以搜索和引用。这是一段效率很低的代码。for
循环对字符串中的每个原始字母迭代一次,即使字符串不是以元音开头。