NSMutableArray比较不同的计数

时间:2013-03-25 12:54:02

标签: iphone ios objective-c nsstring nsmutablearray

我的新应用有问题:

我有两个字符串:

NSString *string1 = @"Il alla a la prison sur le champ" 
NSString *string2 = @"Il alllla a la prissson sur le champ"

我制作数组:

NSArray *arrayReference = [string1 componentsSeparatedByString:@" "]; 
NSArray *arrayUser = [string2 componentsSeparatedByString:@" "]; 

我比较了数组:

NSMutableArray *arrayResult; 

for (int i = 0; i < arrayReference.count ; i++)
{
  NSString *stringReference = [arrayReference objectAtIndex:i]; 
  NSString *stringUser = [arrayUser objectAtIndex:i]; 

  if ([stringReference isEqualToString:stringUser])
  {
    [arrayResult addObject:stringUser]; 
  }
  else {
    [arrayResult addObject:[NSString stringWithFormat:@"<strong>%@</strong> <italic>%@</italic>",stringUser]; 
  }
}

然后我得到:

NSString *stringResult = [arrayResult componentsJoinedByString:@" "]; 

所以我可以打印:

Il alllla alla la prisssson 监狱 sur le champ

没关系,我可以解决用户的错误。

但是当阵列没有相同的计数时我有问题!

如果我有:

NSString *string1 = @"Il alla a la prison sur le champ";
NSString *string2 = @"Il fjdbfds alllla a la prison fdnfs sur le cahmp";

我想打印:

Il fjdbfds alllla alla 监狱 fdnfs sur le cahmp champ

当我输入我的for(...)时,应用程序崩溃,因为我正在尝试将nil对象插入NSString

如果需要,请帮助我,paypal捐款。

谢谢大家。

马丁是世界上最好的开发者:

字符串用户: Il alla sur le champ a la prison juju,il descendit au cabanon du saltimbanque; il l'appela par son nom,lui pris la main et lui parla。 Il passa toutelajournéeeuprésdelui,oubliant la nourriture et le sommeil,priant dieu pour l'ameducondamnéetpriantlecondmanépourla sienne propre。 Il lui dit les meilleures verite qui sont les plus simples。 Il fut pere,frere,ami,eveque pour benir seulement。 Il lui enseigna tout,en le rassurant et en le consolant。 Cet homme allait mourir deseperer。 La mort etait pour lui comme un abime。 Debout et fremissant sur le seuil lugubre,il reculait avec horreur。 Il n'etait pas assez无知倾吐etre absoluement无动于衷。 Sa condamnation,secousse profonde,avait en quelques sorte rompue ca et la autour de lui cette coison qui nous separe du lystere des choses et que nous appelons la vie。 Iléassanscesse au dehors de ce monde ar ses breches fatales,et ne coyait que des tenebres。 L'eveque lui fit voir une clarte。

字符串参考:Il alla sur lechampàlaprison,il descendit au cabanon du saltimbanque; il l'appela par son nom,lui prit la main et lui parla。 Il passa toutelajournéeeuprèsdelui,oubliant la nourriture et le sommeil,priant Dieu pour l'âmeducondamnéetpriantlecondamnépourla sienne propre。 Il lui dit lesmeilleuresvérités,qui sont les plus simples。 Ilfutpère​​,frère,ami,évêquepourbénirseulement。 Il lui enseigna tout,en le rassurant et en le consolant。 Cet homme allaitmourirdésespéré。 Lamortétaitpourlui commeunabîme。 Deboutetfrémissanturce seuil lugubre,il reculait avec horreur。 Iln'étaitpasassez ignorantcourêtrerabolumentindifférent。 Sa condamnation,secousse profonde,avait en quelque sorterompuçàetlàautourde lui cette cloison quinouséparedumystèredeschoses et que nous appelons la vie。我认为这是一个很好的解决方案,而且还有一个很好的解决方案。 L'évêqueluifit voiruneclarté。

结果字符串: Il alla sur le champ a à la 监狱juju 监狱, il descendit au cabanon du saltimbanque; il l'appela par son nom,lui pris prit la main et lui parla。 Il passa toutelajournéeauprés auprès de lui,noubliant la nourriture et le sommeil,priant dieu Dieu pour < strong> l'ame l'âme du condmané condamné et priantlecondamnépourla sienne propre。 Il lui dit les meilleures verite vérités,qui sont les plus simples。 Il fut père,frère, père,frère ami, eveque évêque pour benir bénir seulement。 Il lui enseigna tout,en le rassurant et en le consolant。 Cet homme allait mourir ** desperer。 désespéré。 La mort etait était pour lui commeunabîme。 Debout et fremissant frémissant sur le ce seuil lugubre,il reculait avec horreur。 Il n'etait n'était pas assez ignorant pour etreabsoluementindifférent êtrerabolumentindifférent。 Sa condamnation,secousse profonde,avait en quelques _quelque_ sorte rompuçà rompuçà et làautourde lui cette cloison quinouséparedumystèredeschoses et que lous appelons la autour vie。_Iléanssans cesse au dehors_ de ce monde parcesbrèchesfatales, _et ne voyait que desténèbres。 L'évêque_lui cette coison qui nous separe du lystere des choses et que nous appelons la vie。 Iléassanscesse au dehors de ce monde ar ses breches fatales,et ne coyait que des tenebres。 L'eveque lui 适合voir une clarte。 clarté

7 个答案:

答案 0 :(得分:2)

而不是:

for (int i = 0; i < arrayReference ; i++)

DO

NSInteger index = 0;
for (NSString * stringReference in arrayReference)
{
   if(index < [arrayUser count])
   {
       NSString * stringUser = [arrayUser objectAtIndex: index++];
       ...
       ...
       // do your comparison here
   } else {
       // you need to decide what to do if stringUser would be NULL
   }
}

答案 1 :(得分:1)

您正在查看i < arrayReference。但是arrayReference是一个数组,你必须检查数组中的项目数。

for (int i = 0; i < [arrayReference count] ; i++) {
    NSString *stringReference = [arrayReference objectAtIndex:i];
    if([arrayUser count]> i) {
         NSString *stringUser = [arrayUser objectAtIndex:i]; 
         if ([stringReference isEqualToString:stringUser])
         {
            [arrayResult addObject:stringUser]; 
         } else {
            [arrayResult addObject:[NSString stringWithFormat:@"<strong>%@</strong> <italic>%@</italic>",stringUser]; 
         }
    } else {
        //do you want to do something if the second array does not contain more words?
    }
}

答案 2 :(得分:1)

在以下一行

 [arrayResult addObject:[NSString stringWithFormat:@"<strong>%@</strong> <italic>%@</italic>",stringUser];

您在这里给出了两个格式说明符(%@),但您只给出了一个值。这就是崩溃的原因。 这一行应该是。

[arrayResult addObject:[NSString stringWithFormat:@"<strong>%@</strong> <italic>%@</italic>",stringUser,@"Some Text"];

答案 3 :(得分:0)

“arrayUser”的应用程序崩溃计数的简单原因小于“arrayReference”的计数,&amp;你正在为“arrayReference”运行循环,&amp;试图获取“arrayUser”的值......

您需要应用以下代码段才能比较两个数组

  

这将有助于您比较任何动态阵列


for (int i = 0; i < [arrI count]; i++)
{
    for (int j = 0; j < [arrJ count]; j++)
    {
        if ([[arrJ objectAtIndex:j] isEqualToString:[arrI objectAtIndex:i]])
        {
            NSLog(@"%@",[arrI objectAtIndex:i]);
        }
    }
}

其中arrI = arrReference 和

arrJ = arrUser

享受编程!!

答案 4 :(得分:0)

试试这个

for (int i = 0; i < [arrayReference count] ; i++)
{

    NSString *stringReference = [arrayReference objectAtIndex:i];

    NSString *stringUser = @"";
    if (i<[arrayUser count]) {
         [arrayUser objectAtIndex:i];
    }

    if ([stringReference isEqualToString:stringUser])
    {
        [arrayResult addObject:stringUser];
    }
    else {

         NSString *tempString = @"";
        if ([stringUser length])
        {
            tempString = [NSString stringWithFormat:@"<strong>%@</strong> <italic>%@</italic>",
                          stringUser,stringReference];
        }
        else{
            tempString = [NSString stringWithFormat:@"<italic>%@</italic>",stringReference];
        }

        [arrayResult addObject:tempString];
    }
}

答案 5 :(得分:0)

这是你在找什么?

NSString *string1 = @"Il alla a la prison sur le champ";
NSString *string2 = @"Il fjdbfds alllla a la prison fdnfs sur le cahmp";

NSMutableArray *array1 = [[string1 componentsSeparatedByString:@" "] mutableCopy];
NSMutableArray *array2 = [[string2 componentsSeparatedByString:@" "] mutableCopy];
NSMutableArray *goodArray = [NSMutableArray array];

while ([array1 count] > 0 && [array2 count] > 0) {
    // Check if first word of array2 occurs in array1: 
    NSString *word = [array2 objectAtIndex:0];
    NSUInteger idx = [array1 indexOfObject:word];
    if (idx == 0) {
        // correct word
        [goodArray addObject:word];
        [array1 removeObjectAtIndex:0];
        [array2 removeObjectAtIndex:0];
    } else if (idx == NSNotFound || idx > 4) {
        // extra word in array2
        [goodArray addObject:[NSString stringWithFormat:@"<strong>%@</strong>", word]];
        [array2 removeObjectAtIndex:0];
    } else {
        // missing word from array1
        word = [array1 objectAtIndex:0];
        [goodArray addObject:[NSString stringWithFormat:@"<em>%@</em>", word]];
        [array1 removeObjectAtIndex:0];
    }
}
// Remaining missing words:
for (NSString *word in array1) {
    [goodArray addObject:[NSString stringWithFormat:@"<em>%@</em>", word]];
}
// Remaining extra words:
for (NSString *word in array2) {
    [goodArray addObject:[NSString stringWithFormat:@"<strong>%@</strong>", word]];
}

NSString *stringCorrected = [goodArray componentsJoinedByString:@" "];
NSLog(@"%@", stringCorrected);

输出:

Il <strong>fjdbfds</strong> <strong>alllla</strong> <em>alla</em> a la prison <strong>fdnfs</strong> sur le <strong>cahmp</strong> <em>champ</em>

或呈现为HTML:

Il fjdbfds alllla alla 监狱 fdnfs sur le cahmp < EM>冠军

答案 6 :(得分:0)

最简单的方法是将第一个字符串转换为NSDictionary。由于我们不关心值,因此请将它们初始化为零。

所以这看起来像NSString *string1 = @"Il alla a la prison sur le champ"

Il -> 0, alla ->0 a -> 0, la -> 0 etc.

现在在转换为数组后迭代第二个字符串。创建一个新的resultString。

for(iterate elements through array)
{
   check if the element exists in dictionary
   if(!exists)
   {
      concatenate the result string with element that does not exist
   }

   concatenate the result string with current element

}

我刚才提出了一个基本想法。您需要解决的坑数很少。例如,如果字典包含比数组等更多的字符串,那该怎么办。