Swift中DNA到RNA的转录

Swift中DNA到RNA的转录,swift,string,dna-sequence,Swift,String,Dna Sequence,我试图在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”

我试图在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”常量

使用

使用


您的问题是由以下事实引起的:
中为。。。在…
中,循环是不可变的。对于一个简单的
集合
,您只需遍历
集合
中存在的索引范围,并使用下标访问可变变量的值

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"
一个不解决特定问题但适用于此特定问题的简单解决方案是使用一个简单的
映射
将所有
“t”
字符转换为
“U”


您的问题是由以下事实引起的:
中为。。。在…
中,循环是不可变的。对于一个简单的
集合
,您只需遍历
集合
中存在的索引范围,并使用下标访问可变变量的值

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"
一个不解决特定问题但适用于此特定问题的简单解决方案是使用一个简单的
映射
将所有
“t”
字符转换为
“U”



你需要一张地图。比如说,你是否理解错误的原因,只需要找到解决错误的方法,还是根本不理解错误?我不理解错误。我的猜测是字符串中的字符被认为是常量,因此不能更改。@KevinTrinh否。错误是因为
for
循环中声明的变量是
let
常量。啊,这很有帮助。斯威夫特还是个新手。谢谢你需要一张地图。比如说,你是否理解错误的原因,只需要找到解决错误的方法,还是根本不理解错误?我不理解错误。我的猜测是字符串中的字符被认为是常量,因此不能更改。@KevinTrinh否。错误是因为
for
循环中声明的变量是
let
常量。啊,这很有帮助。斯威夫特还是个新手。谢谢对于问题中描述的用例,是。事实上,还有几个替换。我知道:)让我们一次解决一件事。@Gereon但这个答案无助于OP解决他们试图解决的真正问题。我试过运行你的代码。但是,我最终得到了一个不同的错误:Swift::error:type'String'的值没有成员'replacingoccurrencesof'返回DNA。replacingoccurrencesof(“T”,带:“U”)^~~~~~~~~~~~~~~~~~~~~~~~~~~~对不起,我的错误,从内存中键入,现已修复@rmaddy:当我写这篇文章时,我所要做的就是回答最初的问题。对于问题中描述的用例,是的。事实上,还有几个替换。我知道:)让我们一次解决一件事。@Gereon但这个答案无助于OP解决他们试图解决的真正问题。我试过运行你的代码。但是,我最终得到了一个不同的错误:Swift::error:type'String'的值没有成员'replacingoccurrencesof'返回DNA。replacingoccurrencesof(“T”,带:“U”)^~~~~~~~~~~~~~~~~~~~~~~~~~~~对不起,我的错误,从内存中键入,现已修复@rmaddy:当我写这篇文章时,我所要做的就是回答最初的问题。这很有效!看来我也应该开始学习地图了。这很有效!看来我也应该开始学习地图了。
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"
func toRNA(DNA: String) -> String{
    var RNA = ""
    for char in DNA {
        if char == "T" {
            RNA.append("U")
        } else {
            RNA.append(char)
        }
    }
    return RNA
}
func toRNA(DNA: String) -> String{
    return String(DNA.map({$0=="T" ? "U" : $0}))
}