【问题标题】:Word output based on NSString sequences基于 NSString 序列的单词输出
【发布时间】:2013-10-22 06:53:42
【问题描述】:

我想要做的是从 NSString 中获取 3 个字母的单词序列,并将它们更改为相应的单词。 EX)AUG =“START”,AGC =“Asparagine”等。我的想法是将 NSString 更改为 NSArray,每个元素包含 3 个字母,然后我可以在 for 循环中引用它们,以创建一个新字符串与结果词。

例子:

NSDictionary *aminoReplaceDict = @{
                                       @"AAA" : @"Lysine",
                                       @"AAC" : @"Asparagine",
                                       @"AAG" : @"Lysine",
                                       @"AAU" : @"Asparagine",
                                       @"ACA" : @"Threonine",
                                       @"ACC" : @"Threonine",
                                       @"ACG" : @"Threonine",
                                       @"ACU" : @"Threonine",
                                       @"AGA" : @"Arginine",
                                       @"AGC" : @"Serine",
                                       @"AGG" : @"Arginine",
                                       @"AGU" : @"Serine",
                                       @"AUA" : @"Isoleucine",
                                       @"AUC" : @"Isoleucine",
                                       @"AUG" : @"START",
                                       @"AUU" : @"Isoleucine",
                                       @"CAA" : @"Glutamine",
                                       @"CAC" : @"Histidine",
                                       @"CAG" : @"Glutamine",
                                       @"CAU" : @"Histidine",
                                       @"CCA" : @"Proline",
                                       @"CCC" : @"Proline",
                                       @"CCG" : @"Proline",
                                       @"CCU" : @"Proline",
                                       @"CGA" : @"Arginine",
                                       @"CGC" : @"Arginine",
                                       @"CGG" : @"Arginine",
                                       @"CGU" : @"Arginine",
                                       @"CUA" : @"Leucine",
                                       @"CUC" : @"Leucine",
                                       @"CUG" : @"Leucine",
                                       @"CUU" : @"Leucine",
                                       @"GAA" : @"Glutamic Acid",
                                       @"GAC" : @"Aspartic Acid",
                                       @"GAG" : @"Glutamic Acid",
                                       @"GAU" : @"Aspartic Acid",
                                       @"GCA" : @"Alanine",
                                       @"GCC" : @"Alanine",
                                       @"GCG" : @"Alanine",
                                       @"GCU" : @"Alanine",
                                       @"GGA" : @"Glycine",
                                       @"GGC" : @"Glycine",
                                       @"GGG" : @"Glycine",
                                       @"GGU" : @"Glycine",
                                       @"GUA" : @"Valine",
                                       @"GUC" : @"Valine",
                                       @"GUG" : @"Valine",
                                       @"GUU" : @"Valine",
                                       @"UAA" : @"STOP",
                                       @"UAC" : @"Tyrosine",
                                       @"UAG" : @"STOP",
                                       @"UAU" : @"Tyrosine",
                                       @"UCA" : @"Serine",
                                       @"UCC" : @"Serine",
                                       @"UCG" : @"Serine",
                                       @"UCU" : @"Serine",
                                       @"UGA" : @"STOP",
                                       @"UGC" : @"Cysteine",
                                       @"UGG" : @"Tryptonphan",
                                       @"UGU" : @"Cysteine",
                                       @"UUA" : @"Leucine",
                                       @"UUC" : @"Phenylalanine",
                                       @"UUG" : @"START",
                                       @"UUU" : @"Phenylalanine",
                                       };
    NSMutableString *replaceString = [NSMutableString stringWithString:_trnaOut.text];
    for( NSString *replaceWord in [aminoReplaceDict allKeys] )
    {
        [replaceString replaceOccurrencesOfString:replaceWord withString:aminoReplaceDict[replaceWord] options:NSCaseInsensitiveSearch range:NSMakeRange(0, replaceString.length )];
    }
    _aminoOut.text = replaceString;

输出:

【问题讨论】:

  • 我误解了你的问题吗?例如,您似乎想将“AUC”转换为“Word 1”,但当前接受的答案是相反的并且不处理重叠(例如“AUCAUC”包含“UCA”但不是有效的密码子匹配对于那个字符串)。
  • @CRD 我接受了答案,因为我很容易将其反转并且它有效,但是,我刚刚意识到存在重叠问题,因为我刚刚评论了我接受的答案,并在我的代码中进行了更新.
  • 已修复问题并在接受的答案中更新了代码。
  • 很高兴知道我没有对视,并且您已经解决了重叠问题(顺便说一句,在当前版本的答案中,您可以将两个循环合二为一)。跨度>
  • @CRD 您介意编辑以反映单个循环吗?

标签: iphone ios objective-c nsstring nsarray


【解决方案1】:

这应该可行(省略与您的问题相同的字典):

 NSString *exampleString = @"AAACAACAU";
NSMutableArray *stringArray = [[NSMutableArray alloc] init];
for( int i = 0; i < exampleString.length; i += 3)
{
    NSString *substring = [exampleString substringWithRange:NSMakeRange(i, 3)];
    [stringArray addObject:substring];
}

NSMutableArray *replacedArray = [[NSMutableArray alloc] init];
for( NSString *key in stringArray)
{
    NSString *replacedWord = aminoReplaceDict[key];
    [replacedArray addObject:replacedWord];
}

NSString *replaceString = [replacedArray componentsJoinedByString:@", "];
NSLog(@"%@", replaceString);

【讨论】:

  • 要替换的字符串应该放在哪里?
  • 我不明白你的问题。
  • 原始的 NSString 是 @"AUCGUAUCA",我在哪里引用该代码中的 NSString?
  • @RileyLloyd 被修改的字符串是可变字符串replaceString。请注意在循环中我们如何用字典单词替换字典键的出现?
  • @RileyLloyd 很高兴你能弄明白。如果您还有其他问题,请告诉我。 hussainShabbir,继续前进,这些不是你要找的机器人。
【解决方案2】:

@riley Lloyd,据我了解,您的要求如下:-

First you need to split your string into three characters:-
NSString *yourString = @"AUCGUAUCA";

//it will give you AUC
NSRange oneToThreeRange= NSMakeRange(0, 3);
NSString *oneToThree= [yourString substringWithRange:oneToThreeRange];


//it will give you GUA
NSRange fourToSixRange= NSMakeRange(3, 3);
NSString *fourToSix= [yourString substringWithRange:fourToSixRange];

//it will give you UCA
NSRange sixToNineRange= NSMakeRange(6, 3);
NSString *sixToNine= [yourString substringWithRange:sixToNineRange];

//Now add on your array and perform what you want to do

NSArray * youArr=[NSArray arrayWithObjects:oneToThree,fourToSix,sixToNine,nil];
NSLog(@"%@",youArr);

【讨论】:

  • 你把问题复杂化了。没有必要做所有这些子字符串的事情,因为你可以在字典中更容易地设置它。
  • 另外,由于字符串是由用户输入的,所以不知道你需要做多少。不实用。
  • 哦,我以为你想让你的字符串先断掉。当任何人想在上述情况下拆分字符串时,上面的代码会很有帮助。