我正在尝试创建一个应用程序,根据预先确定的映射将英文字母映射到各种 RNA 密码子(A、C、U 或 G 的序列,每组 3 个)。

要将英语转换为 RNA,字典如下所示:

var englishTomRNA: [Character: [String]] = ["A": ["UUU", "UAC"], 
                                            "Q": ["UUA"], 
                                            "S": ["UCU", "UCC", "UCA"]] 

等等

如您所见,任何给定的英文字符都有多个值(代表多基因基因型的生物学特征),我可以毫无问题地转换成这些值。

然而,我在实现时确实遇到了一个问题,那就是用另一种方式隐藏的字典。我最初使用 switch: case 语句是这样的:

    for codon in preEnglishInputString { 
        switch codon { 
            case "UUU", "UAC":               inEnglish.append("A") 
            case "UUA":                      inEnglish.append("Q") 
            case "UCU", "UCC", "UCA", "UCG": inEnglish.append("S") 
        } 
    } 

但是,现在我希望将 RNA -> English 转换函数转换为使用字典,以便更符合此实现。

我不知道如何为单个值设置多个键(与上面使用的单个键的多个值相反。)

以下内容在尝试时不起作用:

let mRNAtoEnglish: [[String] : Character] = 
                                            [["UUU", "UAC"]       : "A", 
                                            ["UUA", "UUG"]        : "Q", 
                                            ["UCU", "UCC", "UCA"] : "S"] 

编译器大喊Type [String] does not conform to protocol 'Hashable'

我只是使用了错误的数据结构,还是有一些我不知道的语法? (我对 Swift 还很陌生)

谢谢!

请您参考如下方法:

您不能将数组用作字典键。键是唯一的。同一个键不能在字典中出现两次,但不同的键可以指向同一个值。所有键的类型必须相同,所有值的类型也必须相同。

所以正如 Leo 评论的那样,保存具有相同值的 3 个键而不是具有 3 个键的单个数组:

let mRNAtoEnglish: [String : Character] = 
    ["UUU": "A", 
     "UAC": "A", 
     "UUA": "Q", 
     "UUG": "Q", 
     "UCU": "S", 
     "UCC": "S", 
     "UCA": "S"] 


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!