🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
![](http://www.rhinostudio.cn/files/course/2019/01-31/232046e4f701398871.png) 这一部分,是很重要的一部分,因为这部分的运算器涉及的都是GH中最核心也是最难的一部分,数据结构。之前很多人觉得数据结构很难,我要说的是,说不难是假的,但还没难到吓人的地步。只要你知道原理,多去用,就能很快掌握。数据结构的本质,就是组织,就是分组。这就好像一个学校,要分几个年级,年级里要分几个班级,班级里可能还分几个组。就是为了方便管理,不然难道所有学生一起授课么?再比如中国的军队,这么多人,不可能不去分组,不过名字不一样,叫编制,一个班大约10人,一个排三个班,一个连3个排,加上炊事班等等勤务保障兵,大约有100人,一个营三个连,一个团三个营,一个师三个团,一个军三个师,这样算下来个师有一万多人,一个军4万接近5万人。所以,GH里也一样,因为数据多了,很多时候不能一股脑上,一股脑处理,所以要分组,要区分,才好管理,才好运算,这才有了数据结构。 比如说,矩形阵列运算器Square输出的cells和points都是自带数据结构的,我们用Param Viewer来查看,就可以看到如下图,其中{0;0;0}就是这一支数据的名称,N=5就是指这一支数据里包含的数据个数。你说为什么叫{0;0;0}?这就好像小区为什么叫区,班级为什么叫班级,年级为什么叫年级?没多少为什么,就是这么定的。这就是规则。那我们可以看到{0;0;0}一直到{0;0;4}总共有5组数据(从0开始计数),每一组都有五个数据。这就是cells输出端的数据结构,简单说就是分了五组,每组五个数据。那{0;0;0}-{0;0;4}前面的“0;0”有什么意义么?都是一样的,为啥还有“0;0”?为啥不直接叫{0}-{4}? ![](http://www.rhinostudio.cn/files/course/2019/03-04/22010953c5ef675747.png) 没错,就当前来说,确实没什么意义,都是重复的。我们完全可以反手就是一个simplify tree给他简化掉。如下图,但是呢,这个“0;0”虽然目前是多余的,不代表是没用的。 ![](http://www.rhinostudio.cn/files/course/2019/03-04/220915b49bcf644304.png) 这就好像你已经到了你朋友家楼下了,你朋友只需要告诉你303房间即可,但是这时候他告诉你我家在2号楼4门303,你说错了么?没错,需要吗?当前不需要,但如果有朋友还在小区外甚至离得很远,就需要了。这里的“0;0”差不多就一个意思,目前不需要,但是并不是没有意义的。尤其是在merge数据的时候,虽然结构都一样,下面的两组都是五组,五个数据,但是merge不到一起去,因为名称不一致,一个,是0大组,0二组,5小组,五个数据,另一个是五大组,五个数,没了,你说,怎么合到一起? ![](http://www.rhinostudio.cn/files/course/2019/03-04/2211539d8f3c464747.png) ![](http://www.rhinostudio.cn/files/course/2019/03-04/2212524c2f25435510.png) 所以,你得尽量保证数据结构一直,数据结构的名称也尽量一致。 再比如,我们有一堆线,我想隔一个成一个面,就需要去分组。 ![](http://www.rhinostudio.cn/files/course/2019/03-04/22200222f97d577794.png) ![](http://www.rhinostudio.cn/files/course/2019/03-04/22200223eaa9156182.png) 那我这个时候就可以两两分到一组,去loft,因为所有的运算器,只会去计算组内的数据。 ![](http://www.rhinostudio.cn/files/course/2019/03-04/22212448d618397731.png) 这些呢,也仅仅是举了些简单的例子,让大家有一定的了解,实际应用的时候可能会比这个复杂的多,但是也没大家想的那么复杂,你看起来复杂,大多数时候仅仅是因为数据量多,看起来复杂,所以我们经常习惯在调试阶段先把数据量调少,等逻辑确立了,再调大数据量。ok~让我们进入正题吧。