如果数组元素在另一个数组中,如何跳过处理该元素? (三)

问题描述 投票:0回答:3

array1
array2
是两个结构实例数组,使用 malloc 数组函数分配。
array1_totlength
array2_totlength
是数组中元素的数量。

我想对

func1()
的每个元素执行操作
array1
,除了
array2
中的元素。

for (int bl= 0; bl < array1_totlength; bl++)
    {
      /* If this element is in array_2, skip it.*/
      for (int l= 0; l < array2_totlength; l++)
      {
        if (array2[l] == array1[bl])
        {?????}
        
      }
      func1(array1[bl]);
      
    }

注意这是问题的简化版;在我的实际情况下,

array2
的每个元素都有一个指向
array1
元素的指针。代码向
array2
添加了一个新元素(通过内存重新分配),它的指针指向相应的
array1
元素。我需要跳过创建已经指向的元素;另一种方法是完全废弃
array2
并从头开始制作,但我不倾向于这个选项,因为如果我以前做过的话,再做一遍是没有意义的,它只会不必要地减慢程序。

arrays c unique nested-loops
3个回答
1
投票

例如你可以写

for ( int bl = 0; bl < array1_totlength; bl++ )
{
      /* If this element is in array_2, skip it.*/
      int l = 0;

      while ( l != array2_totlength && array2[l] != array1[bl] ) ++l;

      if ( l == array2_totlength ) func1(array1[bl]);
      
}

1
投票

要解决您的问题,您可以执行以下操作

    for (int bl = 0; bl < array1_totlength; bl++)
     {
      /* If this element is in array_2, skip it. */ 
     for (int l = 0; l < array2_totlength; l++)
     {
          if (array2[l] == array1[bl])
             {continue;}
         else{
               func1(array1[bl]);
              }
         }
     }

0
投票

只需使用一个变量来指示是否找到。这有效,也向阅读代码的任何人发出意图信号。

for (int bl= 0; bl < array1_totlength; bl++)
    {
      bool found = false;
      /* Search for the element in array_2 */
      for (int l= 0; l < array2_totlength; l++)
      {
        if (array2[l] == array1[bl])
        {
           found = true;
           break; /* stop searching */
        }        
      }
      if (!found) {
        func1(array1[bl]);
      }
      
    }
© www.soinside.com 2019 - 2024. All rights reserved.