mql5语言的特点、微妙之处以及技巧 - 页 47 1...404142434445464748495051525354...247 新评论 Artyom Trishkin 2017.07.13 07:50 #461 米科拉_2。像这个?https://www.mql5.com/ru/code/9336问题是关于一个结构数组和按结构字段排序。 Alexey Navoykov 2017.07.13 11:03 #462 阿尔乔姆-特里什金。有没有人按结构中的任何(非字符串)给定字段对结构数组 进行过资源高效的排序?假设有一个带有int、datetime和double三个字段的结构,有一个由这个结构组成的数组充满了数据。在数组的每个单元中,结构的字段被填充。如何按这些字段中的任何一个对这个数组进行排序? 你创建了数组double[][2],将其填充为{ fieldvalue, arrayindex }。通过常规的ArraySort(按第一次变化)进行排序。然后你根据索引来安排数组中的结构。我相信这是MQL中所有可能的方法中最快的方法。 Artyom Trishkin 2017.07.13 11:05 #463 阿列克谢-纳沃伊科夫。 创建数组double[][2],像{ fieldvalue, arrayindex }那样填充它。通过常规的ArraySort(按第一次变化)进行排序。然后你需要根据索引来安排数组中的结构。 我想绕过这个方法。我想,也许还有其他方法。 Alexey Navoykov 2017.07.13 11:10 #464 阿尔乔姆-特里什金。 我想绕过这个方法。我想,也许还有其他方法。为什么要绕过它?没有更快捷的方法,因为排序是由一个本地函数完成的。 Artyom Trishkin 2017.07.13 11:23 #465 阿列克谢-纳沃伊科夫。为什么要绕过它?你想不出有什么比这更快的了,因为它是一个本地函数来进行排序的。 实际上,我马上就开始用了。我想,也许有人已经发明了一种很好的方法来 按任何字段对 结构数组进行排序。 Vasiliy Sokolov 2017.07.13 11:48 #466 阿尔乔姆-特里什金。有没有人按结构中的任何(非字符串)给定字段对结构数组 进行过资源高效的排序?假设有一个带有int、datetime和double三个字段的结构,有一个由这个结构组成的数组充满了数据。在数组的每个单元中,结构的字段被填充。如何按这些字段中的任何一个对这个数组进行排序? 你好,如果你需要某种通用的排序函数,可以对复杂数据类型的数组进行排序,这在原则上是不可能的。如果你需要一个已知类型的多因素排序能力,你可以用类来做,特别是CArrayObj就是为它设计的。我应该补充的是,即使在C#这样的成人语言中,复杂对象的排序也是通过自定义IComparer解决的。也就是说,你将不得不自己写一个排序标准,都是如此。 TheXpert 2017.07.13 11:54 #467 阿尔乔姆-特里什金。 这是我想绕过的方法。我想可能还有其他方法。有两种方法。第一种方法是设置运算符<第二条途径是职能部门。 TheXpert 2017.07.13 11:59 #468 方法一。template <typename t> void Sort(t& a[], bool ascending = true) { if (ascending) SortShellUp(a); else SortShellDn(a); } template <typename t> void SortShellUp(t& a[]) { t tmp; int n[]={9,5,3,2,1}; int i,j,k,g; int Len=ArraySize(a); for(k=0;k<5;k++) { g=n[k]; for(i=g;i<Len;i++) { tmp=a[i]; for(j=i-g;j>=0 && tmp<a[j];j-=g) { a[j+g]=a[j]; } a[j+g]=tmp; } } } template <typename t> void SortShellDn(t& a[]) { t tmp; int n[]={9,5,3,2,1}; int i,j,k,g; int Len=ArraySize(a); for(k=0;k<5;k++) { g=n[k]; for(i=g;i<Len;i++) { tmp=a[i]; for(j=i-g;j>=0 && a[j]<tmp;j-=g) { a[j+g]=a[j]; } a[j+g]=tmp; } } } struct DrawData { float price; float percent; bool operator < (const DrawData& right) const { return price < right.price; } }; { DrawData items[]; // filling Sort(items); } TheXpert 2017.07.13 12:01 #469 方法二是类似的,只是操作者完全是外部的,并被传递给排序。它有点复杂,但用途更广。如果你需要,我可以给你一些想法,但只能在以后。 排序只是复制粘贴一些kodobase,如果你需要更快的速度,你必须自己写一个智能的,但你只需要写一次就不用再麻烦了。 Rashid Umarov 2017.07.13 12:07 #470 组合器。方法二是类似的,只是操作者完全是外部的,并被传递给排序。它有点复杂,但用途更广。就是说--你必须使用 指向函数的 指针 1...404142434445464748495051525354...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
像这个?
https://www.mql5.com/ru/code/9336
问题是关于一个结构数组和按结构字段排序。
有没有人按结构中的任何(非字符串)给定字段对结构数组 进行过资源高效的排序?
假设有一个带有int、datetime和double三个字段的结构,有一个由这个结构组成的数组充满了数据。在数组的每个单元中,结构的字段被填充。
如何按这些字段中的任何一个对这个数组进行排序?
创建数组double[][2],像{ fieldvalue, arrayindex }那样填充它。通过常规的ArraySort(按第一次变化)进行排序。然后你需要根据索引来安排数组中的结构。
我想绕过这个方法。我想,也许还有其他方法。
为什么要绕过它?没有更快捷的方法,因为排序是由一个本地函数完成的。
为什么要绕过它?你想不出有什么比这更快的了,因为它是一个本地函数来进行排序的。
有没有人按结构中的任何(非字符串)给定字段对结构数组 进行过资源高效的排序?
假设有一个带有int、datetime和double三个字段的结构,有一个由这个结构组成的数组充满了数据。在数组的每个单元中,结构的字段被填充。
如何按这些字段中的任何一个对这个数组进行排序?
你好,如果你需要某种通用的排序函数,可以对复杂数据类型的数组进行排序,这在原则上是不可能的。
如果你需要一个已知类型的多因素排序能力,你可以用类来做,特别是CArrayObj就是为它设计的。
我应该补充的是,即使在C#这样的成人语言中,复杂对象的排序也是通过自定义IComparer解决的。也就是说,你将不得不自己写一个排序标准,都是如此。
这是我想绕过的方法。我想可能还有其他方法。
有两种方法。
第一种方法是设置运算符<
第二条途径是职能部门。
方法一。
方法二是类似的,只是操作者完全是外部的,并被传递给排序。它有点复杂,但用途更广。
如果你需要,我可以给你一些想法,但只能在以后。
排序只是复制粘贴一些kodobase,如果你需要更快的速度,你必须自己写一个智能的,但你只需要写一次就不用再麻烦了。方法二是类似的,只是操作者完全是外部的,并被传递给排序。它有点复杂,但用途更广。
就是说--你必须使用 指向函数的 指针