清除一个定义元素的数组 - 页 5 123456789101112...30 新评论 Maxim Kuznetsov 2018.11.13 09:48 #41 Konstantin Nikitin: 纯粹是为了手头的任务。删除值和空添加一个函数,这样你就可以按标准进行过滤,你就可以开始了。你甚至可以把它加入到你的收藏中 :-) 类似于 int arrayFilter(T &data[], const T value, bool (*cmp)(const T&,const T&)=NotEqual<T>) 拔出所有大于3的值:arrayFilter<long>(array,3,GreaterThen<long>)。 我不确定MQL模板是否能轻易做到这一点。 Denis Kirichenko 2018.11.13 09:49 #42 TheXpert:我没有强求。谢谢你,你今天真好 :-) 关于这项任务。我认为用数据集合中的一个类型(如CArrayDouble)来操作更方便。我的例子。 //--- https://www.mql5.com/ru/docs/standardlibrary/datastructures/carraydouble #include <Arrays\ArrayDouble.mqh> //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { double delta=1 e-3; CArrayDouble ArrDouble; ArrDouble.Delta(delta); double src_arr[]={1,2,3,6,9,5,6,3,25,6,8,7,4}; double value_to_delete=3.0; if(ArrDouble.AddArray(src_arr)) { ArrDouble.Sort(); if(ArrDouble.IsSorted()) { int first_idx,last_idx; first_idx=ArrDouble.SearchFirst(value_to_delete); last_idx=ArrDouble.SearchLast(value_to_delete); if(first_idx>=0) { PrintFormat("\nЭлементов до удаления: %d",ArrDouble.Total()); if(ArrDouble.DeleteRange(first_idx,last_idx)) PrintFormat("Удалено элементов: %d",last_idx-first_idx+1); PrintFormat("Элементов после удаления: %d",ArrDouble.Total()); } } } } //+------------------------------------------------------------------+ 不过也有一个缺点。输出将是一个排序的数组。 TheXpert 2018.11.13 09:52 #43 Denis Kirichenko: 哦,有时沉默和看起来像个傻瓜比... Vladimir Pastushak 2018.11.13 10:44 #44 TheXpert: 哦,有时沉默和看起来像个傻瓜比...比起说什么和澄清任何疑虑,....。 Реter Konow 2018.11.13 10:47 #45 Vladimir Pastushak:有一个数组包含一组1,2,3,6,9,5,6,3,25,6,8,7,4类型的数据,你需要删除例如数值3,得到相同的数组,在输出中没有3和空位... 我正在寻找清除数组中不必要的值的最快方法... 我想到了以下的例子 也许有一个更经济、更快速的方法?通过在数组中循环并删除不需要的值,你可以覆盖下一个单元格中的值,以取代被删除的那一个。将被擦除的值之后的所有数值向左移动,并在计数器中计算被擦除的数值的数量。 然后做ArrayResize(),考虑到被擦除的值的数量。 Zy。不要移动你要删除的数值。你可以将所有的数值移到左边,除了你擦除的数值。 向左移动的数值应等于被擦除的单元格的数量。 Vasiliy Sokolov 2018.11.13 11:06 #46 Vladimir Pastushak:一个愚蠢的问题就是一个没有被问到的问题。 我有几个解决问题的办法,但我一直在寻找更好的解决办法,并向别人学习。几年来,你一直在问类似的问题。你学到了很多吗?对不起,但你似乎还停留在字节和基本 数组的水平上。 这个问题本身的表述是不正确的。任务不是删除重复的值(一般国家考试级别的任务),而是在更大的事情上,因为你似乎在更新有效项目的列表。如果是这样,这个问题听起来应该完全不同。你混淆和误导了参与者,首先是你自己:在原则上把错误的解决方案强加给参与者,并要求使其有效。 Реter Konow 2018.11.13 11:16 #47 Реter Konow:通过在数组中循环,并从其中删除不需要的值,覆盖下一个单元格中的值,以取代删除的值。将被擦除的值之后的所有数值向左移动,并在计数器中计算被擦除的数值的数量。 然后做ArrayResize(),考虑到被擦除的值的数量。 Zy。不要移动你想删除的数值。你可以将所有的数值移到左边,除了你擦除的数值。 向左移动的数值应等于被擦除的单元格的数量。 int Arr[20] = 1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2; int deleted; //-------------- for(int a1 = 0; a1 < ArraySize(Arr); a1++) { if(deleted)Arr[a1] = Arr[a1 + deleted]; if(Arr[a1] == 3)deleted++; } //-------------- ArrayResize(Arr, ArraySize(Arr) - deleted); 勾选这个选项。 Реter Konow 2018.11.13 11:30 #48 对不起。看起来线条需要颠倒过来。 int Arr[20] = 1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2; int deleted; //-------------- for(int a1 = 0; a1 < ArraySize(Arr); a1++) { if(Arr[a1] == 3)deleted++; if(deleted)Arr[a1] = Arr[a1 + deleted]; } //-------------- ArrayResize(Arr, ArraySize(Arr) - deleted); Sergey Dzyublik 2018.11.13 11:38 #49 Реter Konow:对不起。看起来线条需要颠倒过来。 谜语: 如果皮诺曹给了他两个苹果,而卡罗爸爸给了他三个,那么皮诺曹会有多少个苹果?答案: 10。源变量需要被初始化。 Реter Konow 2018.11.13 11:53 #50 Реter Konow:对不起。看起来线条需要颠倒过来。 有更多的工作要做。 int Arr[20] = {1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2}; int deleted; //-------------- for(int a1 = 0; a1 < ArraySize(Arr); a1++) { if(Arr[a1] == 3) { if(deleted)a1-= deleted;//Cмещение назад. deleted++; } if(deleted)Arr[a1] = Arr[a1 + deleted]; } //-------------- ArrayResize(Arr, ArraySize(Arr) - deleted); 123456789101112...30 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
纯粹是为了手头的任务。删除值和空
添加一个函数,这样你就可以按标准进行过滤,你就可以开始了。你甚至可以把它加入到你的收藏中 :-)
类似于
拔出所有大于3的值:arrayFilter<long>(array,3,GreaterThen<long>)。
我不确定MQL模板是否能轻易做到这一点。
我没有强求。
谢谢你,你今天真好 :-)
关于这项任务。我认为用数据集合中的一个类型(如CArrayDouble)来操作更方便。我的例子。
不过也有一个缺点。输出将是一个排序的数组。
哦,有时沉默和看起来像个傻瓜比...
比起说什么和澄清任何疑虑,....。
有一个数组包含一组1,2,3,6,9,5,6,3,25,6,8,7,4类型的数据,你需要删除例如数值3,得到相同的数组,在输出中没有3和空位...
我正在寻找清除数组中不必要的值的最快方法...
我想到了以下的例子
也许有一个更经济、更快速的方法?
通过在数组中循环并删除不需要的值,你可以覆盖下一个单元格中的值,以取代被删除的那一个。将被擦除的值之后的所有数值向左移动,并在计数器中计算被擦除的数值的数量。
然后做ArrayResize(),考虑到被擦除的值的数量。
Zy。不要移动你要删除的数值。你可以将所有的数值移到左边,除了你擦除的数值。
向左移动的数值应等于被擦除的单元格的数量。
一个愚蠢的问题就是一个没有被问到的问题。
我有几个解决问题的办法,但我一直在寻找更好的解决办法,并向别人学习。
几年来,你一直在问类似的问题。你学到了很多吗?对不起,但你似乎还停留在字节和基本 数组的水平上。
这个问题本身的表述是不正确的。任务不是删除重复的值(一般国家考试级别的任务),而是在更大的事情上,因为你似乎在更新有效项目的列表。如果是这样,这个问题听起来应该完全不同。你混淆和误导了参与者,首先是你自己:在原则上把错误的解决方案强加给参与者,并要求使其有效。
通过在数组中循环,并从其中删除不需要的值,覆盖下一个单元格中的值,以取代删除的值。将被擦除的值之后的所有数值向左移动,并在计数器中计算被擦除的数值的数量。
然后做ArrayResize(),考虑到被擦除的值的数量。
Zy。不要移动你想删除的数值。你可以将所有的数值移到左边,除了你擦除的数值。
向左移动的数值应等于被擦除的单元格的数量。
勾选这个选项。
对不起。看起来线条需要颠倒过来。
对不起。看起来线条需要颠倒过来。
谜语: 如果皮诺曹给了他两个苹果,而卡罗爸爸给了他三个,那么皮诺曹会有多少个苹果?
答案: 10。源变量需要被初始化。
对不起。看起来线条需要颠倒过来。
有更多的工作要做。