2013-10-14 3 views
0

Что я хочу сделать, это взять 3 символьные последовательности слов из NSString и изменить их на соответствующие слова. EX) AUG = «START», AGC = «Asparagine» и т. Д. Я думал об изменении NSString в NSArray с каждым элементом, содержащим 3 буквы, где я могу ссылаться на них в цикле for, чтобы создать новую строку с Результативными словами.Выход Word на основе последовательностей NSString

Пример:

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; 

Выход: enter image description here

+0

Я не понял ваш вопрос? Кажется, вы хотите преобразовать, например, «AUC» в «Word 1», но принятый в настоящее время ответ делает обратное и не имеет отношения к перекрытию (например, «AUCAUC» содержит «UCA», но не является допустимым совпадением кодонов для этой строки). – CRD

+0

@CRD Я принял ответ, потому что я легко отменил его, и он работает, однако я просто понял, что есть проблема с притиркой, поскольку я только что прокомментировал мой принятый ответ и обновлен в моем коде. – MacBoss123541

+0

Проблемы были исправлены, и код был обновлен в принятом ответе. – MacBoss123541

ответ

2

Это должно работать (выезд из словаря, который является тем же самым в вашем вопросе):

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); 
+0

Где я могу поместить строку, которая будет использоваться для замены? – MacBoss123541

+0

Я не понимаю ваш вопрос. – JonahGabriel

+0

Оригинальная NSString, которая является @ "AUCGUAUCA", где я могу ссылаться на этот NSString в этом коде? – MacBoss123541

1

@riley Lloyd, As Я понимаю ваше требование ниже: -

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); 
+0

Вы по-прежнему усложняете проблему. Нет необходимости делать все эти подстроки, так как вы можете легко настроить его в словаре. – JonahGabriel

+0

Кроме того, поскольку строка вводится пользователем, неизвестно, сколько из них вам нужно будет сделать. Это не практично. – MacBoss123541

+0

Ой, я думал, что вы хотите, чтобы ваша струна разбилась первой. Его штраф выше код будет полезен, когда любой хотел разбить строку в выше ситуации. –

Смежные вопросы