我正在尝试创建一个应用程序,根据预先确定的映射将英文字母映射到各种 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"]