Teď, když jsme stanovili, co je to seznam, pojďme si promluvit o operacích, které s ním můžeme provádět. Představte si seznam jako balíček karet. Seznam je balíček a každá karta představuje položku.
Autor fotografie: Christian Gidlöf
Jaké dotazy ze seznamu vytvoříme? Tím získáte přístup k existujícím vlastnostem.
Počet karet v balíčku? 52.
Počet barev? 4.
Materiál? Papír.
Délka? 3.5" nebo 89 mm.
Šířka? 2.5" nebo 64 mm.
Jaké akce můžeme se seznamem provést? Tím se změní seznam podle dané operace.
Můžeme zamíchat balíček.
Můžeme ho seřadit podle hodnot.
Můžeme ho seřadit podle barev.
Můžeme balíček rozdělit.
Můžeme balíček rozdělit rozdáním karet.
Můžeme z balíčku vybrat konkrétní kartu.
Všechny výše uvedené operace mají analogické uzly aplikace Dynamo pro práci se seznamy obecných dat. Níže uvedené lekce ukážou některé základní operace, které můžeme provádět na seznamech.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Obrázek níže je základní graf, ve kterém nakreslíme čáry mezi dvěma kružnicemi, které představují základní operace se seznamy. Prozkoumáme, jak spravovat data v seznamu a jak prezentovat vizuální výsledky pomocí akcí v seznamu níže.
Začněte uzlem Code Block s hodnotou
500;
.Propojte jej se vstupem x uzlu Point.ByCoordinates.
Uzel z předchozího kroku spojte se vstupem origin uzlu Plane.ByOriginNormal.
Pomocí uzlu Circle.ByPlaneRadius spojte uzel z předchozího kroku se vstupem plane.
Pomocí uzlu Code Block určete hodnotu
50;
pro vstup radius. Toto je první kruh, který vytvoříme.Pomocí uzlu Geometry.Translate posuňte kružnici o 100 jednotek ve směru osy Z.
Pomocí uzlu Code Block definujte rozsah deseti čísel mezi 0 a 1 s tímto řádkem kódu:
0..1..#10;
Blok kódu z předchozího kroku propojte se vstupem param dvou uzlů Curve.PointAtParameter. Propojte uzel Circle.ByPlaneRadius se vstupem curve horního uzlu a uzel Geometry.Translate se vstupem curve dolního uzlu.
Pomocí uzlu Line.ByStartPointEndPoint spojte dva uzly Curve.PointAtParameter.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Uzel List.Count je jednoduchý: spočítá počet hodnot v seznamu a vrátí výsledné číslo. Tento uzel je při práci se seznamy seznamů složitější, ale to si předvedeme v následujících částech.
Uzel **List.Count ****** vrací počet řádků v uzlu Line.ByStartPointEndPoint. V tomto případě je to hodnota 10, která souhlasí s počtem bodů vytvořených z původního uzlu Code Block.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
List.GetItemAtIndex je základní způsob, jak dotazovat položku v seznamu.
Nejprve kliknutím pravým tlačítkem myši na uzel Line.ByStartPointEndPoint vypněte jeho náhled.
Pomocí uzlu List.GetItemAtIndex vybereme index 0 nebo první položku v seznamu řádků.
Chcete-li pomocí uzlu List.GetItemAtIndex vybrat jinou položku, změňte hodnotu posuvníku v rozmezí od 0 do 9.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Možnost List.Reverse obrátí pořadí všech položek v seznamu.
Chcete-li správně zobrazit obrácený seznam čar, vytvořte více čar změnou uzlu Code Block na
0..1..#50;
.Duplikujte uzel Line.ByStartPointEndPoint, vložte uzel List.Reverse mezi uzel Curve.PointAtParameter a druhý uzel Line.ByStartPointEndPoint.
Pomocí uzlů Watch3D zobrazte náhled dvou různých výsledků. První zobrazí výsledek bez obráceného seznamu. Čáry se připojují vertikálně k sousedním bodům. Obrácený seznam však spojí všechny body v opačném pořadí v druhém seznamu.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
List.ShiftIndices je dobrý nástroj ke tvorbě zkroucení, šroubovicových vzorů nebo jiných podobných manipulací s daty. Tento uzel přemístí položky v seznamu do daného počtu indexů.
Stejným postupem jako při otáčení seznamu připojte uzel List.ShiftIndices k uzlu Curve.PointAtParameter a Line.ByStartPointEndPoint.
Pomocí uzlu Code Block s hodnotou 1 posuňte seznam o jeden index.
Všimněte si, že změna je jemná, ale všechny čáry v dolním uzlu Watch3D se posunuly o jeden index při připojení k druhé sadě bodů.
Pokud například změníme uzel Code Block na větší hodnotu, například 30, všimneme si významného rozdílu mezi příčnými čarami. V tomto případě funguje posun jako čočka kamery, což vytváří v původní válcové formě otočení.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Uzel List.FilterByBooleanMask odebere určité položky podle seznamu logických hodnot nebo podle hodnot true nebo false.
Aby bylo možné vytvořit seznam hodnot true nebo false, je třeba ještě trochu pracovat...
Pomocí uzlu Code Block definujte výraz pomocí této syntaxe:
0..List.Count(list);
. Připojte uzel Curve.PointAtParameter ke vstupu list. Toto nastavení projdeme více v kapitole bloku kódu, ale v tomto případě nám řádek kódu poskytuje seznam reprezentující každý index uzlu Curve.PointAtParameter.Pomocí uzlu %** (modulo)** spojte výstup uzlu _Code Block_se vstupem x a hodnotu 4 se vstupem y. Tak získáme zbytek po dělení seznamu indexů 4. Modulo je velmi užitečné pro vytváření vzorů. Všechny hodnoty budou možné zbytky po dělení 4: 0, 1, 2, 3.
Z uzlu %** (modulo)** víme, že hodnota 0 znamená, že index je dělitelný 4 (0, 4, 8 atd.). Pomocí uzlu == můžeme testovat dělitelnost porovnáním s hodnotou 0.
Uzel Watch zobrazuje pouze toto: máme vzor s hodnotou true/false, který je následující: true, false, false, false....
Pomocí tohoto vzoru true/false připojte vstupní hodnotu masky dvou uzlů List.FilterByBooleanMask.
Spojte uzel Curve.PointAtParameter s každým vstupem seznamu pro List.FilterByBooleanMask.
Výstup Filter.ByBooleanMask čte hodnoty in a out. In představuje hodnoty, které měly hodnotu masky true, zatímco out představuje hodnoty, které měly hodnotu false. Zadáním výstupů in do vstupů startPoint a endPoint uzlu Line.ByStartPointEndPoint jsme vytvořili filtrovaný seznam čar.
Uzel Watch3D ukazuje, že máme méně čar než bodů. Vybrali jsme pouze 25 % uzlů filtrováním pouze hodnot true.