我试图在Swift中返回一条DNA链(一条字符串)的RNA补体。基本上,如果DNA有"T",我就用"U“代替它。
我的代码是:
func toRNA(DNA: String) -> String{
var RNA = DNA
for ntide in RNA{
if ntide == "T"{
ntide = "U"
}
}
return RNA
}Swift::错误
不能赋值:'ntide‘是'let’常量
ntide = "U"
~~~~~ ^发布于 2018-02-01 17:45:51
您的问题是由于在for ... in ...循环中声明的变量是不可变的。对于一个简单的Collection,您只需迭代Collection中存在的索引范围,并使用下标来访问可变变量的值。
func toRNA(_ DNA:[Character])->String{
var RNA = DNA
for i in 0..<DNA.count {
if RNA[i] == "T" {
RNA[i] = "U"
}
}
return String(RNA)
}
let dna:[Character] = ["A","C","G","T"]
toRNA(dna) //"ACGU"但是,由于String索引和下标的不同,这对于您的问题并不是那么简单,因此上面的示例使用Array<Character>来显示泛型方法。有关Strings的具体问题,请参阅下面的解决方案。
您可以绕过这个问题,而不是将DNA复制到RNA,然后通过RNA迭代以获得必要的字符,只需遍历DNA并更改要添加到其中的字符。
func toRNA(DNA: String) -> String{
var RNA = ""
for char in DNA {
if char == "T" {
RNA.append("U")
} else {
RNA.append(char)
}
}
return RNA
}一个简单的解决方案不能解决特定的问题,但可以解决这个特定的问题,它使用一个简单的map将所有属于"T"的字符转换为"U"。
func toRNA(DNA: String) -> String{
return String(DNA.map({$0=="T" ? "U" : $0}))
}发布于 2018-02-01 17:41:14
使用
func toRNA(DNA: String) -> String{
return DNA.replacingOccurrences(of: "T", with: "U")
}https://stackoverflow.com/questions/48568670
复制相似问题