清除一个定义元素的数组

 

有一个数组包含一组1,2,3,6,9,5,6,3,25,6,8,7,4类型的数据,你需要删除例如数值3,得到相同的数组,在输出中没有3和空位...

我正在寻找清除数组 中不必要的值的最快方法...

我想到了以下的例子

int ArrayDeleteEmpty(int &one[])
  {
   int two[];   int c=0;
   for(int i=0; i<ArraySize(one); i++)
      if(one[i]!=NULL && one[i]!="")
        {
         c++;
         if(ArrayResize(two,c,10000)>=0)
            two[c-1]=one[i];
        }
   for(int i=0; i<ArraySize(two); i++)
      if(ArrayResize(one,i+1,10000)>=0)
         one[i]=two[i];
   return c;
  }

也许有一种更便宜、更快捷的方法?

 
Vladimir Pastushak:

有一个数组包含一组1,2,3,6,9,5,6,3,25,6,8,7,4类型的数据,你需要删除例如数值3,得到相同的数组,在输出中没有3和空位...

我正在寻找清除数组中不必要的值的最快方法...

我想到了以下的例子

也许有一个更经济、更快速的方法?

ArrayResize 应该从循环中移除,并且(如果为每一个LONG奋斗,检查条件,并在最后单一的Resize)。

但把所有的东西都从循环中取出来是一种典型的做法,这可以在以后批量进行,或者根本就不做......

 

1.将数组one[]重写为相同维度的数组work[],删除不必要的元素,将需要的元素移到它们的位置。

2.将数组work[]重写为新维度的数组two[]。

HH:删除循环运算符(ArraySize)中的函数调用。
 
int ArrayDeleteEmpty(const int del, int &one[])
  {
   int i = ArrayBsearch(one, del),
       y = ArraySize(one)-1;
   
   if(one[i] != del)
     return 0;
   
   for(; i<y; i++)
      one[i] = one[i+1];
   ArrayResize(one, y);
   
   return y;
  }
 

这里有一个这样的变体。

template<typename T>
int arrayFilter(T &data[], const T value)
{
  int dst = 0, src = 0;
  for(; src < ArraySize(data); src++)
  {
    if(data[src] != value)
    {
      if(dst != src)
      {
        data[dst] = data[src];
      }
      dst++;
    }
  }
  
  if(dst < src)
  {
    ArrayResize(data, dst); // will only work with dynamic array
  }
  return dst;
}

void OnStart()
{
  long array[] = {1, 2, 3, 6, 9, 5, 6, 3, 25, 6, 8, 7, 4};
  ArrayPrint(array, 0, NULL, 0, arrayFilter<long>(array, 3));
}

返回过滤后的数组中的元素数量。如果是动态的,可以自动减少其大小。

 
Stanislav Korotky:

这里有一个这样的变体。

返回过滤后的数组中的元素数量。如果是动态的,可以自动减少其大小。

再来几个(再来几个直径的地面),我们就能实现功能了 :-)

设置目标 [ 过滤 $source [ lambda x { expr $x !=3 } ]

这是tcl,在lisp中更短。

 
最快的方法是使用ArrayCopy(),并以相反的顺序循环,这样就不会移动那些将被删除的元素。
 
Dmitry Fedoseev:
最快的方法是使用ArrayCopy(),并以相反的顺序循环,这样就不会移动那些将被删除的元素。

并不适合,因为可能有一个包含字符串的结构数组。

 
一个有42种产品,一个有6种,一个有30种。我不敢想象里面是一个怎样的屁眼,有那么多的问题和答案。
 
TheXpert:
一个有42种产品,另一个有6种,另一个有30种。我不敢想象这些问题和答案里面有多大的一个混蛋

一个愚蠢的问题就是一个没有被问到的问题。

我有几个解决问题的办法,但我一直在寻找更好的解决办法,并向别人学习。

 
谢天谢地,我只有一个:) ...产品和一个解决方案选项。