Dynamo數(shù)據(jù)淘金——07//列表的層級(jí)與連綴屬性

這一節(jié),將以第4節(jié)為基礎(chǔ),講解列表的兩個(gè)重要屬性:層級(jí)與連綴.同樣的,仍以Revit自帶的案例(rac_basic_sample_project)作為數(shù)據(jù)源.

一、層級(jí)
前面已經(jīng)強(qiáng)調(diào)過,dynamo與Excel交互時(shí),所有數(shù)據(jù)都是以列表的結(jié)構(gòu)形式存儲(chǔ)的.這些數(shù)據(jù)對(duì)應(yīng)到Excel中,每一行就是一個(gè)列表,很多行組成了一個(gè)工作表單,而工作表單是更大的一個(gè)列表.
如果用列表的方式存儲(chǔ),就是:
工作表單第一行數(shù)據(jù):list 0
工作表單第二行數(shù)據(jù):list 1
工作表單第三行數(shù)據(jù):list 2
……
工作表單第N行數(shù)據(jù):list (N-1)
所有這些數(shù)據(jù)匯總成整個(gè)工作表單:
整個(gè)工作表單(列表list)=[list0, list1, list2, …,list(N-1)]
如果用Dynamo的呈現(xiàn)形式則為:
list
?????? 0 list
?????? 1 list
?????? 2 list
?????? ……
?????? (N-1)list
0,1,2,……,N-1,這些數(shù)字是索引值.
由上可知,用列表存儲(chǔ)數(shù)據(jù)時(shí),不可避免的出現(xiàn)了列表的嵌套,因此就形成了列表的層級(jí).
整個(gè)工作單形成的列表是第一層級(jí):@L1
每一行數(shù)據(jù)形成的列表是第二層級(jí): @L2
每一行數(shù)據(jù)的單個(gè)數(shù)據(jù)是第三層級(jí):@L3
?通過實(shí)際操作演示一下
(1)創(chuàng)建如下節(jié)點(diǎn),根據(jù)標(biāo)高把房間成組:

由結(jié)果可知,通過標(biāo)高把房間成組,成組(groups)后的輸出為三級(jí)列表.
第一層級(jí)為整個(gè)大列表list
第二層級(jí)分別為0 list, 1list
第三層級(jí)分別為L(zhǎng)evel 2、Level 1的房間
(2)獲取對(duì)成組后的房間的編碼,根據(jù)編碼數(shù)字大小排序.

可知,編碼可以獲取,但是排序報(bào)錯(cuò)!
List.SortByKey節(jié)點(diǎn)是列表的一個(gè)排序方法,操作對(duì)象是列表.我們想排序的是201,202,203這些數(shù)字,它們是屬于第二層級(jí)0 list列表的元素,因此List.SortByKey節(jié)點(diǎn)操作的列表級(jí)別應(yīng)該是第二層級(jí).否則默認(rèn)是第一層級(jí).
(3)修改節(jié)點(diǎn)的列表層級(jí)后,運(yùn)行正確.

(4)列表有層級(jí)后,一旦對(duì)內(nèi)部層級(jí)的列表進(jìn)行操作,就需要一直對(duì)節(jié)點(diǎn)進(jìn)行層級(jí)的選擇,會(huì)帶來(lái)不便.因此,有時(shí)候會(huì)根據(jù)需要把列表的層級(jí)取消,一般使用List.Flatten節(jié)點(diǎn).

二、連綴
連綴屬性是兩個(gè)列表之間的對(duì)應(yīng)關(guān)系.為了更好的理解,仍然續(xù)接上面的節(jié)點(diǎn),以獲取房間的參數(shù)數(shù)據(jù)為例.
(1)編輯節(jié)點(diǎn)獲取房間的三個(gè)參數(shù)數(shù)據(jù):

(2)節(jié)點(diǎn)過于冗余,優(yōu)化節(jié)點(diǎn),通過一個(gè)節(jié)點(diǎn)實(shí)現(xiàn),只需將參數(shù)以列表形式存儲(chǔ)即可:

顯示結(jié)果并不正確.因?yàn)樽髠?cè)房間有14個(gè),右側(cè)僅顯示三個(gè)數(shù)據(jù).
Element.GetParameterByName節(jié)點(diǎn)輸入端連接的是兩個(gè)列表,一個(gè)是包含14個(gè)房間的列表,另一個(gè)是包含3個(gè)參數(shù)的列表.
兩個(gè)列表的映射關(guān)系可以有好幾種方式:
假定兩個(gè)列表表示為
List 1 =[房間1,房間2,房間3,……,房間14]
List 2 =[參數(shù)1,參數(shù)2,參數(shù)3]
//連綴屬性--最短
房間1—參數(shù)1
房間2—參數(shù)2
房間3—參數(shù)3
剩下房間不再執(zhí)行操作
//連綴屬性--最長(zhǎng)
房間1—參數(shù)1
房間2—參數(shù)2
房間3—參數(shù)3
剩下房間執(zhí)行最后一個(gè)參數(shù)
房間1-14—參數(shù)3
//連綴屬性—叉積
房間1-14—參數(shù)1
房間1-14—參數(shù)2
房間1-14—參數(shù)3
默認(rèn)情況下,節(jié)點(diǎn)自動(dòng)選擇連綴屬性.這三個(gè)連綴屬性適用于不同的數(shù)據(jù)處理.可知,我們想要實(shí)現(xiàn)的功能是”叉積”
(3)修改節(jié)點(diǎn),右鍵將連綴屬性改為”叉積”,顯示正確.

以上就是列表的層級(jí)與連綴屬性.