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(),并以相反的顺序循环,这样就不会移动那些将被删除的元素。
最快的方法是使用ArrayCopy(),并以相反的顺序循环,这样就不会移动那些将被删除的元素。
并不适合,因为可能有一个包含字符串的结构数组。
一个有42种产品,一个有6种,一个有30种。我不敢想象里面是一个怎样的屁眼,有那么多的问题和答案。
TheXpert:
一个有42种产品,另一个有6种,另一个有30种。我不敢想象这些问题和答案里面有多大的一个混蛋
一个有42种产品,另一个有6种,另一个有30种。我不敢想象这些问题和答案里面有多大的一个混蛋
一个愚蠢的问题就是一个没有被问到的问题。
我有几个解决问题的办法,但我一直在寻找更好的解决办法,并向别人学习。
谢天谢地,我只有一个:) ...产品和一个解决方案选项。
有一个数组包含一组1,2,3,6,9,5,6,3,25,6,8,7,4类型的数据,你需要删除例如数值3,得到相同的数组,在输出中没有3和空位...
我正在寻找清除数组 中不必要的值的最快方法...
我想到了以下的例子
也许有一种更便宜、更快捷的方法?