![97f29a8b6d8bf39fbd011c8dc4da4342.png](https://i-blog.csdnimg.cn/blog_migrate/e8f99ba40ca2a4fc006a36840f2b92ad.jpeg)
在Dynamo中有些功能是ByKey的,像SortByKey,GroupByKey等,许多人对什么是Key,如何理解和运用它十分困惑,下面我们就来解析一下。
在Dynamo中,每一个列表都可以看做一组数据,多维的列表(列表内含有列表)可以看做是综合数据,我们以墙体为例,单个的墙体会有楼层、无连接高度、类型、材料等信息。为此,我们可以将这些信息组合成一个列表来保存关于此片墙的所有需要的信息。但是在设计工作中,我们不会只处理一片墙,而是会有几十甚至成百上千的墙体,将每一片墙体的信息列表再组合,我们就会形成一个含有所有墙体信息的综合列表,这个列表同时也是一个数据库。按照我们的组合方式将这些数据展开到Excel中会发现,每一行会对应一片墙,此行的各列保存墙体对应属性的数据值。
构造这样一个数据库的目的是在未来使用,从中读取需要的信息,当墙体的总体数量比较多时,获取指定的数据会变得比较复杂和消耗时间(如果仅仅是简单的遍历比较),这时候我们或者需要使用数据库处理软件,或者需要一些简易的算法来提升读取数据的速度。在使用Dynamo时,我们一般不调用数据库处理软件,可以通过设计数据结构的方式来加速数据读取。这个时候,就可以使用Key。
数据库中的每一项记录都有一个天然的Key,叫做索引(Index),就是一个从0开始的连续自然整数序列。获取索引对应的数据也有内置的GetItemAtIndex节点。相信这也是大多数Dynamo用户从列表中获取数据的方式。
Index很好用,也很容易理解,但是有个缺点,不同Index之间的差异无法迅速的判断出来,每一次的提取都需要记录或者计算枯燥的数字索引值,然后再提取。能否给索引一个有意义的名称,方便日后的查询管理呢?
答案是可以。事实上,这个“有意义的Index”,就是我们要谈论的Key。
将索引有意义化之后,我们会知道这个Key的一个基本特征:是个列表,长度与数据库列表长度一样。因此对于任意的列表数据,我们都可以指定一个长度(列表的第一层)与之一样的列表来作为Key来转递给ByKey的节点调用。
我们使用Key之后,还有如下几个优势:
- 原索引不会丢失,因为索引是缺省必有的。
- Key可以是任意数据,因此有些时候可以直接使用某一项的属性值如“材料名称”来作为Key而不必构造一个Key。
- Key可以有重复。使用基本索引时,索引的每一项都不一样,因为索引属于数据库中的“Primary Key”,是可以区分每一项数据记录的。而我们标记的Key,根据需要是可以有重复项的,这样我们才可以GroupByKey,否则每一项都不一样,就没有Group的必要。
理解和使用Key,可以帮助我们在索引之外提供另外一种更有效的数据读取方式,尤其是对于二维行列式样的复合数据的操作。许多时候,可以从原始列表经过处理形成一个新的数据列表,然后将这个新表作为Key来处理原始列表。
![3c43c08c2e78f4b05a752cff65f97dac.png](https://i-blog.csdnimg.cn/blog_migrate/25bdc4a1b38d68a858cf8a1fecd6e75c.png)
如在上图,从曲线列表生成其是否是闭合曲线的T/F列表,而后使用这个列表来Group和Filter(只能Group成两个组时,可以直接用Filter)。对于List.FilterByBoolMask节点的结果数据,也是通过Key来提取的。如在IN端口输出的数据,在Code Block内需要写成NodeData["in"],其中的key就是"in"这个字符串。同样的,另外一个key就是"out"。
快速链接
上一篇《《《《《 应用秘籍目录 》》》》》下一篇