Dynamo列表详解

"Dynamo"实用技巧系列“list”x详解

Dynamo 发表于 2015-07-11 20:21:50

列表(List)是Dynamo中的一个重要数据结构。可惜不仅重要,而且复杂,有44个相关的命令。这里把所有命令的使用方法以实例的方式给出,希望对大家有用。

 

如有问题,欢迎进行Dynamo中文论坛讨论,点击“原文”链接或复制下面的地址到浏览器:

http://dynamochina.com/

 

AddItemToFront和AddItemToEnd分别给一个列表的头部或尾部添加一个元素。

CartesianProduct是数学里笛卡尔乘积的意思。作用是把两个一维列表的元素两两配对,组成一个二维列表。
如果第一个列表有M个元素,第二个列表有N个元素,生成的二维列表就有M*N个元素,或者说有M行,N列。


Chop是切的意思,把一个列表按给定的长度切成一段一段的,组成一个二维列表。如果给定的长度不能整除列表元素个数,那么最后一小段的长度会小于给定长度。


Combinations的意思是数学中排列组合的组合。给定组合的长度,生成一个列表里所有元素的可能组合。Replace参数用于确定组合中可不可以有重复元素。


Combine用于把两个列表中的元素按索引顺序两两执行一个操作。图中把一个6个元素的列表,和一个2个元素(每个元素都是一个一维列表)的列表进行“+”操作。大家看到只有前两个元素是有值的。因为第二个列表没有第2到第5个元素,所以加法操作无法进行。


ConstainsItem用于判断一个列表中是否含有指定值的元素。


Count输出列表中的元素个数。

 


Cycle可以把一个列表中的元素从头到尾重复N次,用来扩展列表的元素个数。


Deconstruct把一个列表分成第一个元素和剩下元素组成的新列表。


DiagonalLeft和DiagonalRight可以把输入的矩阵按对角线切成二维列表。这里矩阵的表示方法是一维列表加行的个数。切割方法如下图所示。


DropEveryNthItem即每隔指定个数,从列表中抽取出一个元素并扔掉。Offset参数用于调整第一个抽取的元素从哪开始。



DropItems从列表的头部开始连续抽取并扔掉N个元素。相当于连续使用多个Deconstruct运算器。

 

Filter可以对一个列表中的所有元素进行指定的过滤判断,将符合条件和不符合条件的元素各输出成新列表。
这里condition输入参数是一个条件判断,注意“>=”运算器的用法,其第二个输入参数必须留空,Filter运算器会自动将输入列表中的各元素填入。

 


FilterByBoolMask根据输入的一列布尔型值,来决定输入列表中的元素孰留孰去。

 

FirstItem和LastItem分别取出列表的第一个元素和最后一个元素。

 

 

Flatten可以将一个二维或多维数组展平为一维数组。Amt参数指定要展平的层数。

 

IsEmpty判断列表中是否有至少一个元素。

 

Join把两个或多个列表依次连接成一个列表,即把后续列表中的元素依次追加到第一个列表的尾部。

 

LaceLongest和LaceShortest对两个列表中索引相同的对应元素两两进行指定运算,生成一个新列表。这两个运算器和Combine运算器作用类似,区别是当列表中元素个数不一样时,Combine运算器会输出空值null,而这两个运算器会选择不继续运算(LaceShortest)和连续使用较短列表的最后一个元素(LaceLongest)。

 

Reverse指输入列表的元素按相反顺序组成新列表。注意只有第一维的元素会被反向重组。
Map可以对列表中的每一个元素应用一个操作,注意这个运算器也只会应用在第一维元素上。

 

MaximumItem和MinimumItem即取出输入列表中元素的最大值和最小值。

 

 

OfRepeatedItem可以把一个列表当作一个元素,复制这个元素N次,组成一个高一维度的列表。这个运算器与Cycle运算器类似,区别是Cycle不会增加列表的维度。

 

Permutations是数学里排列组合中的排列。可以对列表中所有元素,列出给定长度的所有组合可能。

 

 

Reduce是一个顺序累积操作,用于对列表中的元素依次进行同一操作,前一次操作的值作为后一次操作的输入参数之一。这个运算器可以实现累加,阶乘等操作。

 

RemoveItemAtIndex抽取并扔掉指定索引号(即第N个)的元素。

 

ReplaceByCondition根据给定的过滤条件,将符合条件的元素替换成指定元素。

 

 

RestOfItems扔掉第一次元素,将剩下的元素组成新列表。这个运算器与Deconstruc运算器类似,输出更简洁。

 

 

Scan从seed开始,对输入列表中的每个元素依次执行reductor。每次执行的结果作为下一次操作的输入参数之一,另一个参数是列表中的下一次元素。

 

 

ShiftIndices类似洗牌时的切牌,指定切牌的位置,把输入列表分成两部分,互换位置。

 

 

Shuffle随机地改变输入列表中的元素顺序,生成新列表。

 

 

Slice指定列表中元素的起始位置、终止位置和步长,抽取出这些元素组成新列表。

 

 

Sublists从一个一维列表中每隔N个元素取出一个,新生成的列表给每个取出的元素创建了一个新列表。

 


TakeEveryNthItem对输入列表每隔N个元素取出一个,组成新列表。Offset参数用于调整取出的第一个元素的位置。

 

 

TakeItems取出输入列表中的头N个元素,给成新列表。

 

 

 

Transpose把一个二维列表当作矩阵,作行列转换(转置)操作,生成新的二维数组。

 

UniqueItems剔除输入列表中的重复元素并生成新列表。

 

 

至于我就不多介绍了。

 

 

 

如有问题,欢迎进行Dynamo中文论坛讨论,点击“原文”链接或复制下面的地址到浏览器:

http://dynamochina.com/

 

 

Deattor 2015年7月11日20:20:58

 
声明:以上内容转载自微信公众号《Dynamo》,并不代表本站观点及立场,且版权归属微信公众号《Dynamo》

posted @ 2018-11-29 16:41  AnnLT  阅读(3206)  评论(0)    收藏  举报