分享

好长一片Sets组运算器详解

 IJST_90 2019-08-02

(我是谁)

编者目前是一名天津大学在读的规划系大三学生,古怪的爱好很多,参数化设计也是其中之一,在观望了很久前辈们的学习之路后,终于得闲开始了自己漫漫的技术学习之路。Grasshopper作为参数化设计入门级的编程算法插件,其语言与逻辑相对而言还是比较容易掌握的,而理解Grasshopper的核心在于数据结构,Sets部分可以帮助我们很快地了解并掌握这部分知识。这里整理出的自己对Sets部分电池的剖析笔记,具体参考的是Rhino自带的help功能以及官网(https://www./)上给出的解释,也欢迎大家反馈指正,期待与更多的小伙伴一起进步。

(长文笔记)

【List】

1.List item“输出指定索引的项” 

  输入List - 输入列表;

          Index(integer)- 指定索引(整数) ;

           Wrap(Boolean)- 是否可以循环读取列表数据,见例(2);

 【输出】item - 提取出来的项。

(1)当index小于列表索引最大值时,

注:当输入端数据为树型数据时,运算器会对每一个分支的数据分别起作用,如下图所示。

(编程中,索引是从0开始计数的,故当index输入值为3时,提取的是列表中第4个数据)

(2)当index大于列表索引最大值时(右键set boolean会发现系统默认设置是true,如果选择false则会报错,因为系统在列表里找不到该索引值,故而无法输出数据),

如下图所示,系统会从索引为0的数据开始依次数到第i个,这里第9个刚好数到索引为3的点。

2.insert item “在列表指定位置插入项”

  输入List - 被插入的列表;

           item - 要插入的项;

           Index(integer)- 指定位置的索引(整数);

           Wrap(Boolean)- 是否可以循环读取列表数据;

 【输出】List - 插入项后的新列表。

注:插入项插入在指定索引的数据之前。

(1)

同理,当输入列表为树型数据时,index会对每一个分支的数据起作用。

(2)通过增加插入点改变曲线形状。

(绿线-原始曲线 红线-加入新插入点后的曲线)

3.Partition list “按照指定数量分隔列表”

  输入List - 被分隔的列表;

           Size(integer) - 指定分隔间距(整数);

 【输出】Chunks - 分隔后的列表。

(1)给定一个分隔间距时,

注:当对树型数据进行分隔时,是将所有数据合并在一起后再按照指定分隔间距进行分隔,并重新生成列表。

(2)给定多个分隔间距时,分隔次序按照数值接入输入端的次序来(如下图所示,接入顺序为2-3-1,所以分隔次序也是2-3-1)。

4.Reverse list “颠倒列表数据顺序”

 输入List - 被作用的列表;

 【输出】List - 作用后的列表。

4.Sort list “根据某一关键值给对象排序”

  输入Keys - 关键值/参照值;

           Values A - 要排序的对象;

 【输出】Keys - 关键值排序结果;

           Values A - 对象排序结果。

(1)只输入关键值时,运算器只对关键值排序。

(2)按照曲线长度给曲线排序。

5.Sub list“提取列表内指定区间的数据” 

  输入List - 被提取的列表;

           Domain- 指定的索引区间 ;

           Wrap(Boolean)- 是否可以循环读取列表数据;

 【输出】List - 提取出来的数据列表;

           Index- 提取出来的列表数据所对应的索引值。

4.Item index “找回项在源列表中的索引”

  输入List - 源列表;

            Item - 要查找的项;

 【输出】Index - 输出索引。

注:这一运算器用于当某一项在列表里丢失后,又重新被提取出来时,找回其在源列表中的位置索引。遵循“所要找回索引的项是在源列表里已经存在的”原则。

【误】新输入的“154”不是从源列表中来的,故而系统会找不到该数据(找不到数据会输出-1)

dispatch这种复制数据的运算器所输出的数据,原理同上。

【正】

7.List length “计算列表长度/有多少个数据”

  输入List - 需要被计算长度的列表

 【输出】Length - 列表长度

(1)

(2)当输入端是树型数据时,系统会对每一个列表的长度进行计算然后生成对应的树型数据列表

8.Replace item “替换列表中指定索引位置的项”

  输入List - 被替换项的列表;

           item - 用于替换的项;

           Indices(integer)- 指定替换位置的索引(只能是整数);

           Wrap(Boolean)- 是否可以循环读取列表数据;

  【输出】List - 替换项后的列表。

9.Shift list “整体挪动列表中的项”

  输入List - 被作用的列表;

           Shift- 挪动数值(+向前移,-向后移);

           Wrap(Boolean)- 是否可以循环读取列表数据;

  【输出】List - 项被整体挪动后的列表。

注:挪动可以理解为列表中每一项的索引在原有基础上做一次shift端输入的运算,如目标列表中各项索引值为{0,1,2,3,4,5},挪动+1后变为{0+1,1+1.2+1,3+1,4+1,5+1}={1,2,3,4,5,6}。

该运算器可以用来找点连线, 不知道点的顺序时可以用point list/point order来查看

10.Split list “在指定索引位置切分列表”

  输入List - 被作用的列表;

           Index- 切分位置的索引;

  【输出】List A - 切分位置前的项组成的列表;

            List B - 切分位置后的项组成的列表。

10.Dispatch “通过输入布尔值‘True/False’或'0/1'将列表分成两个新列表”(copied)

  输入List - 目标列表;

          Dispatch pattern- 对列表中每一项赋布尔值True/False或0/1(通常与一定的判定方法相结合);

 【输出】List A -判定值为True(0)的所有项组成的列表;

           List B - 剩余所有项组成的列表。

注:分隔后列表中的数据会损失源列表的索引。

 

11.Null item “检测空数据和无效数据” 

  输入Item - 被检测项;

 【输出】Null Flags- 是否是空数据 ;

           Invalid Flags- 是否是无效数据;

          Description- 数据状态的描述。

注:该运算器可以用于检测Invalid Mesh, Invalid Curve,Invalid Brep等,在之后的学习中会碰到。

示例,

11.Replace null “替换空数据”   

  输入Items - 被检测项;

          Replacements- 用于替换空数据的项;

 【输出】Items- 替换后不含空数据的项组成的列表;

           Count- 被替换的空数据的数量。

示例见14.Weave(2)。

13.Pick and Choose “按照指定挑选顺序从多组数据流里选项并组成新的数据流”

 输入Pattern - 指定挑选顺序(输入的数据对应输入数据流的序号,并按照相同的位置索引从各组挑选数据);

           Stream 0- 输入的第一组数据流;

           Stream 1- 输入的第二组数据流;

           Stream 2- 输入的第三组数据流;

           ……可继续添加数据流;

 【输出】Result - 生成的新的数据流。

注:这里为了翻译更加准确将Stream译为“数据流”,也可以理解为数据列表。

(1)

(2)顺次连接曲线上各点,并且首尾不相连。

14.Weave “按照指定选择顺序重新编织数据”

  输入Pattern - 指定选择顺序(顺次从各数据流中提取数据,直到各数据流中的数据被全部提取完)

                Stream 0- 输入的第一组数据流

                Stream 1- 输入的第二组数据流

                Stream 2- 输入的第三组数据流

                ……可继续添加数据流

  【输出】Weave - 编织后生成的新列表

注:与Pick'n'Choose不同,Weave里各组数据会被依次全部挑选。

(1)当各数据流长度与Pattern里所需要各组数据的数量关系相匹配时,这里L(0)=3L(1)=3L(2)

(2)当各数据流长度与Pattern里所需要各组数据的数量关系不完全匹配时,选择insert nulls会自动在空缺位置补充null数据(空白数据),这里可以进一步用replace nulls运算器替换掉所有的null数据。

否则,系统会自动跳过空白数据。 

15.CombineData “合并数据,参照不同数据流的数据结构生成新的数据流”(Copied)

 输入Stream0 - 输入的第一组数据流(基础数据流);

           Stream 1 - 输入的第二组数据流;

           Stream 2 - 输入的第三组数据流;

          ……可继续添加数据流;

 【输出】Result - 生成的新数据流;

           Index- 复制数据原索引值生成的列表。

注:运算器将会识别每组数据流的数据结构,选取具有最高层级数据结构的组的组数作为最终组数,选取具有最低级数据结构的组的列表长度作为每组列表的长度,基础数据只参考Stream0。

(1)当输入数据流的数据类型一致时,

变动数据流顺序生成不同的结果示意如下。

当基础数据流(Stream 0)中有null数据时,系统会用stream1中的数据去替换。

(2)当输入数据流的数据类型不一致时。 

16.Sift Pattern “通过输入布尔值‘True/False’或'0/1'过滤掉列表中某些项,并生成两个新列表”(non-copied)

 输入List - 被过滤的列表;

           Sift Pattern- 判定列表中每一项是否过滤的布尔值True/False或0/1;

 【输出】Output 1 - 过滤掉布尔值为False(1)的数据后的列表(保留True或0结果);

           Output 2 - 过滤掉布尔值为True(0)的数据后的列表(保留False或1结果)。

注:过滤后的输出列表会保留与原列表一致的数据结构,空位输出null。

如下,将数据组中小于100的数与大于等于100的数分别过滤掉。

17.Cross References “两组列表数据进行交叉迭代运算”

 输入List(A) - 输入列表A;

           List(B) - 输入列表B;

 【输出】List(A) - 以A为基础数据迭代生成的新列表;

           List(B) - 以B为基础数据迭代生成的新列表。

注:① 运算器将会对输入端两组列表的数据进行排列组合,输出端A输出的结果是用列表A的每一项与列表B的每一项进行匹配的结果,输出端B输出的结果是列表B的每一项与列表A匹配的结果。与Combinedata不同的是,Combinedata基础数据只能是一组,而Cross References可以是两组;Combinedata可以识别多组数据结构,CrossReferences只能识别两组数据结构。

②Cross References运算器总共包含5种运算方式(右键,可以选择不同的运算方式),这里引用https://www./forum/topics/cross-reference-what-is-it-how-does-it-work-why-would-i-need-it 里David Rutten对Cross References数据迭代运算的图解说明做进一步的解释。

正常情况下,当我们输入两个列表{A,B,C}和{X,Y,Z}时,Grasshopper会迭代数据输出三种组合方式,分别是{A,X},{B.Y}和{C,Z},但其实还有六中组合方式没有考虑在内,分别是{A,Y},{A,Z},{B,X},{B,Z},{C,X},{C,Y}。CrossReferences运算器会同时实现这9种组合方式,并在不同运算方式下输出不同的结果,如果我们用一个表格来来表示这些组合(如下所示),表中的行和列分别代表列表A、B的数据,则所有输出结果可表示为:

Holistic 完全运算 :A、B列表中的数据两两全部组合;

Diagonal 对角线运算:删掉所有组合方式中索引相同的组合;

Conincident 重合运算:删掉所有组合方式中任意两个索引相同的组合(因为这里输入端只有两个列表,所以输出结果与Diagonal运算相同,这里不再举例);

Lower Triangle(左)/Lower Triangle(strict)(右) 下三角运算(左)/下三角运算(严格)(右):删掉所有组合方式中列表A中的项比列表B中的项索引值小的组合,严格下三角运算则是在下三角运算的基础上进一步删掉对角线上索引相同的组合;

Upper Triangle(左)/Upper Triangle(strict)(右) 上三角运算(左)/上三角运算(严格)(右):删掉所有组合方式中列表A中的项比列表B中的项索引值大的组合,严格上三角运算则是在上三角运算的基础上进一步删掉对角线上索引相同的组合;

(1)当A、B中有一组为树型数据时,

(2)两组点,两两连线得到的不同结果。

(Holistic 全部运算)

(Diagonal 对角线运算)

(Coincident 重合运算)   

(LowerTriangle/Lower Triangle(strict)下三角运算)

(UpperTriangle/Upper Triangle(strict)上三角运算)

 17.Longest List “将每组列表延长至列表所能产生的最长列表”(non-selected)

 输入List(A) - 输入列表A;

           List(B) - 输入列表B;

           ……可继续添加多个列表;

 【输出】List(A) - 以A为基础数据套用最长数据结构迭代生成的新列表;

          List(B) - 以B为基础数据套用最长数据结构迭代生成的新列表;

          ……以此类推,输出结果与输入列表一一对应。

注:最长列表运算也可以右键选择不同的运算方式,见示例(2)

(1)

(2)两组点连线,当一组点个数比另一组点个数多时,多出来的点会继续运算。

(RepeatLast 重复短列表最后一个数据运算)

(RepeatFirst 重复短列表第一个数据运算)

(Interpolate 插值运算,长列表数据将均匀与短列表数据运算)

(Wrap 循环运算,长列表多出的数据继续与短列表第一个数据开始运算)

(Flip 翻转运算,长列表多出的数据呈S型来回与短列表数据运算)

 17.Shortest List “将每组列表缩短至列表所能产生的最短列表”(non-selected)

  输入List(A) - 输入列表A;

            List(B) - 输入列表B; 

           ……可继续添加多个列表;

  【输出】List(A) - 以A为基础数据套用最短数据结构迭代生成的新列表;

            List(B) - 以B为基础数据套用最短数据结构迭代生成的新列表;

            ……以此类推,输出结果与输入列表一一对应。

注:最短列表运算也可以右键选择不同的运算方式,见示例(2)。

(1)data

(2)两组点连线,当一组点个数比另一组点个数多时,多出来的点不做运算。

(TrimEnd 减掉长列表末尾多出的数据)

(TrimStart 减掉长列表起始多出的数据)

【Tree】

1.Clean tree“清除空数据/无效数据/没有数据的分支” 

 输入RemoveNulls(Boolean) - 是否清除空数据;

           Remove Invalid(Boolean) - 是否清除无效数据 ;

           Remove Empty(Boolean) - 是否清除没有数据的分支;

           Tree - 被作用的列表Tree;

           S1 - 被作用的数据列表S1;

           ……可继续添加多组数据列表;

 【输出】Tree - 清理后的列表Tree;

           S1 - 清理后的列表S1;

           ……输出列表与输入列表一一对应。

注:该运算器只能对数据进行处理,不能对curve、surface之类的进行处理,如下。

2.Graft tree“将列表中每一项单独成组” 

  输入Tree - 输入的列表;

  【输出】Tree - 处理后的列表。

3.Flatten tree“树型数据列表拍平” 

  输入Tree - 被作用的树型数据;

                Path - 拍平后的分支名(所有数据作为一个分支,给其一个分支名);

  【输出】Tree - 拍平后的列表。

将拍平后的列表与其他数据merge后可以看到,分支号保持不变。 

4.Unflatten tree“还原拍平列表” 

 输入Tree - 被拍平过的数据列表;

           Guide - 用于参照的树型数据列表(拍平前数据来源,不可缺);

  【输出】Tree - 还原后的树型数据列表。

(1)

(2)当输入列表的数据来源于多个树型数据时,一定要merge后一起作为源数据输入guide(或者同时输入guide),同理,分支名会与源数据列表保持一致。

5.Simplify tree“简化树型数据结构” 

 输入Tree - 要被简化的树型数据;

           Front(Boolean) - 是否只简化最前面的数据结构; 

 【输出】Tree - 简化后的树型数据。

6.Prune tree“删掉树型数据中指定长度区间的分支列表” 

  输入Tree - 被作用的树型数据;

            Minimum(default=0) - 找出小于(不等于)某一长度的列表(默认值0,等于无参照);

           Maximum(default=0) - 找出大于(不等于)某一长度的列表(默认值0,等于无参照);

  【输出】Tree - 删掉Minimum和Maximum结果后的树型数据列表。

6.Tree statistics“查看树型数据信息” 

  输入Tree - 要查看的树型数据;

 【输出】Path - 各分支名;

           Lengths - 分支长度;

           Count - 分支数量。 

7.Trim tree“修剪树型数据结构,通过合并最外边缘结构简化树型数据结构” 

 输入Tree - 要被修剪的树型数据;

           Depth(integer) - 从边缘开始需要合并的数据层级数(整数)遵循“由左向右”原则;

 【输出】Tree - 修剪数据结构后的树型数据。

7.Entwine “重新扭合多组数据”/“拍平多组数据并组合成一个新的树型数据” 

  输入】Graft 保留输入端数据结构

           (0;x) - 输入的第一组数据;

           (1;x) - 输入的第二组数据;

           (2;x) - 输入的第三组数据;

           …… 可以继续添加多个数据组,x是各组原始数据结构,虽然各组原始数据结构保留,但各输入端数据组相互平行;

          Flattteninputs 拍平输入端数据列表( 扔掉之前的数据结构)

          (0;0) - 输入的第一组数据;

          (0;1) - 输入的第二组数据;

          (0;2) - 输入的第三组数据;

          …… 可以继续添加多组数据,每一组都被拍平变成一个分支,各分支之间相互平行;

 【输出】Result - 拍平重组后生成的新的树型数据。 

8.Flip Matrix“翻转列表数据结构” (paths count与pathslength数据对调)

  输入Data - 输入数据;

 【输出】Data - 翻转数据结构后的数据。

如下,(1)分支数1,单个列表长度6,翻转后分支数为6,单个列表长度为1 ;

       (2)分支数3,单个列表长度4,翻转后分支数为4,单个列表长度为3(分别选取各分支index相同的数组成同一组) 。

注:若输入端输入的是树型数据,则要求其各分支的长度一致,且只能作用于{A}(i)型数据列表。

9.Explode Tree“炸开树” 

  输入Data - 要炸开的树型数据;

 【输出】Branch1 -  第一组分支列表;

           Branch2 - 第二组分支列表;

           …… “+”可添加输出分支数量,依次提取,右键Match outputs可以匹配输出结果。 

10.Merge“组合数据” 

 输入D1 - 输入第一组数据;

           D2 - 输入第二组数据;

          D3 - 输入第三组数据;

          ……可继续添加要添加的数据;

 【输出】Result - 依次组合后形成的树型数据,新的树型数据里分支名与源列表保持一致(注意与entwine的区别)。

11.Match tree“匹配数据结构”/“将某一树型数据的数据结构应用到另一组” 

  输入Tree - 要调整数据结构的树型数据;

                Guide - 数据结构匹配目标树型数据(只参照其分支名);

  【输出】Tree - 调整后的树型数据。

注:两组树型数据的分支长度要一致。

12.Shift path“整体挪动数据结构路径” 

 输入Data - 被挪动的树型数据;

           Offset - 路径挪动的层级数(+向左移, -向右移);

 【输出】Data - 挪动后的新(树型)数据列表。

注:挪动数值的绝对值<(≠)数据结构层级数。

13.Path Mapper“更改路径结构” 

 输入被作用的数据列表;

 【输出】更改路径结构后的数据列表。

支持的编辑形式 如下表所示,字母可赋值(大小写无所谓),数字表特指,i唯一代表index,还可以用item_count代表列表长度,path_index代表路径数据 。

注意小括号/花括号用法!

示例如下。

14.Split tree“根据指定路径切分树型数据” 

 输入Data - 被作用的树型数据;

           Masks - 要分离出的数据路径名;

 【输出】Positive - 符合masks的数据列表;

          Negative - 剩余不符合masks的数据列表。

15.Stream filter“输出指定序号的数据流” 

 输入Gate - 指定输出数据的序号(0,1,2,…);

           Stream1 - 输入第一组数据流(序号0);

           Stream2 - 输入第二组数据流(序号1);

           Stream3 - 输入第三组数据流(序号2);

           ……可继续添加多组数据流;

 【输出】S(Gate) - 输出指定序号的数据流。

 16.Stream Gate“将数据流从特定编号的输出路径输出” 

 输入Stream - 输入数据流;

           Gate - 输出数据流的路径编号(0,1,……最大不超过输入数据流的数量);

 【输出】Target0 - 路径0输出数据流;

           Target1 - 路径1输出数据流;

           …… 可以继续添加输出路径,多组数据输入输出结果是merge之后的数据。

Gate还可以连接布尔运算器Toggle,False - 默认输出路径是0;True - 默认输出路径是1。

17.Relative Item“利用指定的路径运算产生两组相对数据” (1生2)

 输入Tree - 被作用的树型数据;

           Offset - 路径运算,指在原有路径结构的基础上进行该运算,如原始路径结构为{0;0;2}(4),offset{0;1;1}(1),运算后路径变为{0+0;0+1;2+1}(4+1)={0;1;3}(5);

           Wrap Paths(Boolean) - 是否设置路径可循环(True/False);

           Wrap Item(Boolean) - 是否设置项可循环(True/False);

 【输出】Item A - 运算结果项A(直接结果);

           Item B - 运算结果项B,B中的项是A中的项偏移指定数值的结果(+向前偏移,-向后偏移)。

(1)ItemB是相对于ItemA向前偏移1位的结果,

(2)利用relative item实现在网格中画对角线(平行四边形)。

18.Relative Items“利用指定的路径运算分别产生两组相对数据” (2生2)

 输入TreeA - 被作用的树型数据A;

           TreeB - 被作用的树型数据B;

           Offset - 路径运算,原理同Relative item,分别对TreeA和TreeB进行运算,要求TreeA和TreeB数据结构一致;

           Wrap Paths(Boolean) - 是否设置路径可循环(True/False);

           Wrap Item(Boolean) - 是否设置项可循环(True/False);

 【输出】Item A - 从TreeA提取出的项;

            Item B - 从TreeB提取出的项,同理item相对TreeA偏移指定数值。

19.Tree Branch“提取树型数据中指定路径的列表” 

 输入Tree - 被提取的树型数据;

            Path - 指定路径;

 【输出】Branch - 提取出的列表。

(1)

(2)提取某矩阵顶点中的第三行点。

20.Tree Item“提取树型数据中的指定项” 

 输入Tree - 被提取树型数据;

           Path - 目标项所在路径;

            Index - 目标项索引;

           Wrap(Boolean) - 是否循环读取项(只循环读取该路径下的项);

 【输出】Item - 提取出的项。

例:提取出矩阵点中第三行第2个点。

21.Construct Path“由指定数据创建路径” 

  输入Indices(Integer) - 指定数据;

  【输出】Branch - 生成路径。

注:运算器会按照指定数据的输入顺序依次创建路径名。

22.Deconstruct Path“提取路径名数据” 

 【输入】Branch - 目标路径;

 输出Indices(Integer) - 提取出的数据列表。

注:运算器会按照输入路径名的由左向右的顺序依次输出数据,并生成一个列表。

23.Path Compare“判断是否与指定路径结构一致” 

  输入Path - 参与比较的路径(不能直接连Tree,一定是路径数据);

            Mask - 比较的目标路径格式;

  【输出】Comparison - 判断结果True(与Mask一致)/False (与Mask不一致)。 

24.Replace Paths“替换指定路径格式的路径数据”

  输入Data - 要替换路径结构数据的树型数据;

            Search - 指定替换目标的路径格式;

  【输出】Data - 替换后的树型数据。 

注:①Mask可以是某一具体路径,也可以是一个路径区间,一组路径以及某几个路径,具体指示符所代表的的意义如下:

②新版Grasshopper里,区间不再用中括号[A-B],直接用A-B表示。

注:{0;0;0}替换为{0;0}后将与原数据列表中的{0;0}列表合并。 

【Sets】

数列处理运算器。

1.Create sets“创建无重复数据的数列” 

 输入List - 输入列表;

 【输出】Set - 不含重复数据的数列(清除重复数据后的输出结果);

           Map - 新列表中所有数据的源索引表。 

2.Set Difference“A组数据相对B组数据求差集”(A有B没有/A-B) 

 【输入】Set A - 查找数列A;

           Set B - 比较数列B(与A比较找不同的数据列表);

 输出Union - A有B没有的数据。 

3.Set Difference(s)“两组数据互相求差集” (A有B没有orB有A没有)

 【输入】Set A - 输入数列A;

            Set B - 输入数列B;

 输出ExDifference - A、B中所有不重合数据。 

4.Set Interaction“两组数列求交集” (AB交集)

  【输入】Set A - 输入数列A;

            Set B - 输入数列B;

  输出Union - A、B重合数据。 

5.Set Majority“查找三组数列中出现频率大于1的数据” 

  【输入】Set A - 输入数列A;

            Set B - 输入数列B;

            Set C - 输入数列C;

  输出Result - A、B、C各list相比,出现频率大于1的数据组成的列表。 

6.Set Union“两组数列求并集” 

  【输入】Set A - 输入数列A;

            Set B - 输入数列B;

  输出Union -A、B各list求并集后的新列表。

7.Cathesian Product“按照索引平均分配两组数列然后组合” 

  【输入】Set A - 输入数列A;

            Set B - 输入数列B;

  输出Product - 同索引项归为一列,均分AB后产生的新列表。

注:A、B数列长度一致。

8.Disjoint“判定两组数列是否是不相交的/无重合数据” 

  【输入】Set A - 输入数列A;

            Set B - 输入数列B;

  输出Result - disjoint(无重合数据)输出为True , else输出为False。 

9.Member Index“查找数据在数列中的位置索引” 

  【输入】Set  - 源数列;

            Member - 查找数据;

  输出Index - 数据的位置索引;

           Count - 数据在源数列中重复的次数。

(1)

(2)选出z坐标相同的点并且创建内插点曲线。

10.Replace Member“替换数列数据” 

  【输入】Set  - 输入数列;

            Find - 要被替换的数据;

            Replace - 用于替换的数据;

  输出Result - 替换后的数列。 

11.Sub Set“查看B数列是否是A数列的子集” 

  【输入】SetA  - 输入数列A;

            SetB  - 输入数列B;

  输出Result - 判定结果,True-B是A的子集;False-B不是A的子集。

12.Delete Consective“合并数列中连续重复的数据” 

  【输入】Set  - 输入数列;

            Wrap(Boolean) - 是否循环读取数列中的数据;

  输出Set  - 不含连续重复数据的数列;

           Count  - 被删掉的数据个数。

13.Find Similar Member“在数列中查找与给定数据最相似的数” 

  【输入】Data  - 给定参考数据;

            Set - 要查找的数列;

 输出Hit  - 查找出的最接近的数据;

           Index  - Hit中数据在Set里的位置索引。

(1)输入1个数据时

(2)输入多个数据时,分别找与每个数据最接近的数据,然后输出到hit。

注:这里的“接近”不是指数学意义上的大小接近,具体通过什么来判定我也没查清楚,但有一点可以肯定的是当data中的数据包含在set列表里时,输出端Hit一定会输出与data相同的数据并且返回该数据在set中的位置索引,这一点有点像item index运算器,但与item index不同的是其不要求data端的数据是在原列表中已经存在的,如下所示。

14.Key/Value Search“通过规定关键值的顺序给对象排序” 

 【输入】Keys  - 关键值/参照值;

            Values - 要排序的对象;

           Search - 规定关键值的顺序;

  输出Result  - 通过Keys和Values给对象排序的结果。

(1)

(2)按照点的x坐标值大小给点重新排序(从小到大排序)。

【Sequence】

1.Cull Index“删除指定索引位置的项” 

 【输入】List  - 被作用的列表;

           Indices - 指定索引值;

           Wrap(Boolean)- 是否可以循环读取列表数据;

 输出List  - 删掉指定索引位置数据后的列表。 

2.Cull Nth“删除列表里第N的倍数个项” 

  【输入】List  - 被作用的列表;

            Cull frequency(integer) - 指定N值(≥2,且为整数)

  输出List  - 删掉指定位置数据后的列表。

注:N从第0个开始算起。 

3.Cull Pattern“通过输入布尔值‘True/False’从列表出选出某些项” 

  【输入】List  - 被作用的列表;

               Cull Pattern - 输入判定值True/False;

  输出List  - 保留判定值为True的项的列表。

注:List里每一项与Pattern一一对应。

(1)当Pattern的长度小于List的长度时,系统会对List重复作用Pattern。

(2)选出列表里大于150的数据。

4.Random Reduce“随机删除列表里指定数量的项” 

 【输入】List  - 被作用的列表;

            Reduction - 要删除项的数量;

           Seed(integer) - 随机种子(必须是整数;影响因子,一个种子对应一种随机结果);

  输出List  - 删除项后的列表。 

5.Char Sequence“按照形式将字符串中的每一项单独分离出来创建一个字符串序列” 

  【输入】Count  - 字符表长度;

            Char Pool - 字符取用库;

            Format - 字符输出形式  (“{}”中只能是数字);

  输出Sequence  - 输出字符串序列。

注:系统优先将字符串中的每一个字符单独分离成组,当指定字符表的长度(Count)比取用库中字符串的长度长时,超出长度的部分,字符相互之间会两两组合成一个字符串然后作为整体输出(如下图所示)。

6.Duplicate Data“复制数据” 

  【输入】Data  - 要复制的数据;

            Number - 复制次数;

            Order - 是否保持数据原有顺序(如下图左图True,右图False);

  输出Data  - 复制后的新数列。

7.Fibonacci“创建斐波那契数列” 

(依次将后一个数据与前一个数据相加得到新的数据,gh中所有蜗牛壳螺纹图标的电池都与之相关。)

  【输入】Seed A  - 种子数据A;

            Seed B  - 种子数据B;

            Number(Default=10) - 数列长度(默认值为10);

  输出Series  - 生成的数列。

注:当输入的Seed包含多个数据时,系统会分别提取一个数据作为基础数据进行运算,一组seed会生成一个list;当SeedA和SeedB包含数据个数不同时,短列表会自动补齐。 

8.Repeat Data“循环复制数据”(可控制数列长度) 

 【输入】Data  - 被作用的数据;

            Length - 数列长度;

 输出Data  - 生成的数列。

注:与Dupicate Data相比,Repeat Data默认保持原数列顺序,但可以限定输出数列的长度。 

9.Sequence“按照指定计算法则创建数列”

 【输入】Notation - 指定计算法则(默认[N-1]+[N-2]);

           Length(Default=20)  - 数列长度(默认值为20);

           Initial  - 初始数据;

 输出Sequence  - 生成的数列。 

10.Series“创建等差数列”

 【输入】Start(Default=0)  - 数列起始值(默认值为0);

           Step(Default=1)  - 等差数列步长(默认值为1);

            Count(Default=10)  - 生成数据个数/数列长度(默认值为10);

  输出Series  - 生成的等差数列。 

11.Stack Data“可限制不同复制次数地复制列表数据”

 【输入】Data  - 被作用的数据;

           Stack - 指定复制次数;

 输出Data  - 复制后的数据列表。

注:复制次数与Data一一对应,当输入Stack的列表长度小于Data时,系统会对Data循环作用Stack的值。 

12.Jiffer“震荡数据”

  【输入】List  - 被作用的列表;

            Jiffer(0-1) - 震荡幅度(0-1),如震荡幅度为0.5,则数据会在0.5倍总长度的范围内震荡;

            Seed(integer) - 干扰种子(干扰因子);

  输出Values  - 震荡后的数据列表;

           Indices - 输出列表中各项在原列表中位置索引。

13.Random“在指定区间产生指定数量的随机数”

 【输入】Range (Default : 0 to 1)  - 指定区间;

           Number (Default=1) - 指定随机数的个数;

           Seed (Default=2) - 随机种子(根据输入随机种子的数量自动分组);

 输出Random  - 生成的随机数列表。

【Text】

计算机中的Text对应的是字符,即可以是文字、字母、数字或标点符号。

1.Charactrers“将字符表中的每一个字符单独分离成组” 

  输入Text - 被作用的字符表;

 【输出】Result - 每个字符单独成组后的列表;

           Unicode - 每个字符对应的unicode。   

注:Unicode是一个字符集,Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode 编码采用两个字节来表示一个字符,是一种16 位编码方式。目前Unicode 码在全球范围的信息交换领域均有广泛的应用。(来源:百度百科)

2.Concatenate“组合字符” 

 输入FragmentA - 组成部分A;

           Fragment B - 组成部分B;

 【输出】Result - 组合后的字符表。

3.Text join“插入字符” 

  输入Text - 被插入的字符表;

            Join - 要插入的字符(串);

 【输出】Result - 在每个字符串之间插入join值后的字符表。

4.Text Length“计算字符串长度” 

  输入Text - 被计算长度的字符表;

  【输出】Length - 字符串长度。

5.Text Split“在指定字符处打断字符表” 

 输入Text - 被打断的字符表;

           Separators - 指定打断字符处;

 【输出】Result - 打断后的列表。

6.Format“套用字符表的数据结构按照指定格式创建数据列表” 

 输入Format - 指定数据格式;

           Culture - 参照数据结构的字符列表;

           Data 0 - 在Format中{0}代表的数字;

           Data 1 - 在Format中{1}代表的数字;

           Data 2 - 在Format中{2}代表的数字;

           ……可继续添加Data来增加数据组成元素;

 【输出】Text - 生成的数据列表。

7.Text Case“大小写切换” 

  输入Text -  被作用的字符表;

            Culture - 右键可以切换字符类型,按国家按语言类型分的都有,但是... 没发现作用在哪;

 【输出】Upper - 将字符都变成大写;

           Upper - 将字符都变成小写。

8.Text Fragment“提取字符表中指定区间的字符” 

 输入Text -  被提取的字符;

           Start - 起始提取位置(从0开始计);

           Start - 提取长度;

 【输出】Fragment - 提取结果。

9.Text Trim“是/否删除字符首尾的空格” 

 输入Text -  被作用的字符;

           Start(Boolean) - 是否删除字符开头的空格(默认是True);

           End(Boolean) - 是否删除字符末尾的空格(默认是True);

 【输出】Result - 运算后的字符。

10.Match Text“判断字符表中是否有与指定字符格式一致的字符串” 

 输入Text(Text) -  被检测的字符列表;

           Pattern(Text) - 限定匹配格式,有且只有输入格式时输出True;

           RegEx(Text) - 正则表达式,通用匹配格式,只要含输入项即输出True;

           Case(Boolean) - 是否区分大小写;

注:“?”“*”为限定符,“*”代表不确定数据长度及类型的数据,“?”代表确定长度不确定类型的数据,二者均不可重复出现(【误】“????”or“****”);

  【输出】Match(Boolean) - 匹配结果True/False。

注:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个‘规则字符串’,这个‘规则字符串’用来表达对字符串的一种过滤逻辑”。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多