Praca z listami
Last updated
Last updated
Ustaliliśmy już, czym jest lista. Omówmy teraz operacje, które możemy na niej wykonać. Wyobraź sobie listę jako talię kart do gry. Talia jest listą, a każda karta reprezentuje element.
Autor zdjęcia: Christian Gidlöf
Jakie zapytania możemy wykonać z poziomu listy? Umożliwia to dostęp do istniejących właściwości.
Liczba kart w talii? 52.
Liczba kolorów? 4.
Materiał? Papier.
Długość? 3,5" lub 89 mm.
Szerokość? 2,5" lub 64 mm.
Jakie działania możemy wykonać na liście list? Umożliwia to zmianę listy w oparciu o daną operację.
Możemy potasować talię.
Możemy posortować talię według wartości.
Możemy posortować talię według kolorów.
Możemy podzielić talię.
Możemy rozdać karty w talii.
Możemy wybrać określoną kartę w talii.
Dla wszystkich operacji wymienionych powyżej istnieją analogiczne węzły Dynamo do pracy z listami danych ogólnych. W poniższych lekcjach przedstawiono niektóre z podstawowych operacji, które można wykonywać na listach.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Poniższy rysunek przedstawia wykres bazowy, na którym rysujemy linie między dwoma okręgami, aby przedstawić podstawowe operacje na listach. Przeanalizujemy sposób zarządzania danymi na liście i przedstawimy wyniki wizualne za pomocą poniższych operacji na liście.
Rozpocznij od węzła Code Block o wartości
500;
Połącz wejście x z węzłem Point.ByCoordinates.
Podłącz węzeł z poprzedniego kroku do wejścia origin węzła Plane.ByOriginNormal.
Za pomocą węzła Circle.ByPlaneRadius podłącz węzeł z poprzedniego kroku do wejścia plane.
Używając węzła Code Block, oznacz wartość
50;
dla pozycji radius. To pierwszy okrąg, który utworzymy.Za pomocą węzła Geometry.Translate przesuń okrąg w górę o 100 jednostek w kierunku Z.
Za pomocą węzła Code Block zdefiniuj zakres dziesięciu liczb z zakresu od 0 do 1 przy użyciu tego wiersza kodu:
0..1..#10;
Wstaw blok kodu z poprzedniego kroku do wejścia param dwóch węzłów Curve.PointAtParameter. Podłącz węzeł Circle.ByPlaneRadius do wejścia curve górnego węzła i węzeł Geometry.Translate do wejścia curve węzła poniżej.
Za pomocą węzła Line.ByStartPointEndPoint połącz dwa węzły Curve.PointAtParameter.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Węzeł List.Count jest prosty: zlicza wartości na liście i zwraca ich liczbę. Jego działanie jest nieco bardziej złożone podczas pracy z listami list, ale zilustrujemy to w późniejszych sekcjach.
Węzeł **List.Count ****** zwraca liczbę linii w węźle Line.ByStartPointEndPoint. W tym przypadku wynosi ona 10, co odpowiada liczbie punktów utworzonych z oryginalnego węzła Code Block.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Węzeł List.GetItemAtIndex zapewnia podstawowy sposób stosowania zapytania dotyczącego elementu listy.
Najpierw kliknij prawym przyciskiem myszy węzeł Line.ByStartPointEndPoint, aby wyłączyć jego podgląd.
Za pomocą węzła List.GetItemAtIndex wybieramy indeks „0”, czyli pierwszy element na liście linii.
Zmień wartość suwaka na od 0 do 9, aby wybrać inny element za pomocą węzła List.GetItemAtIndex.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Węzeł List.Reverse odwraca kolejność wszystkich elementów na liście.
Aby poprawnie zwizualizować odwróconą listę linii, utwórz więcej linii, zmieniając węzeł Code Block na
0..1..#50;
Powiel węzeł Line.ByStartPointEndPoint oraz wstaw węzeł List.Reverse między węzłem Curve.PointAtParameter i drugim węzłem Line.ByStartPointEndPoint
Użyj węzłów Watch3D, aby wyświetlić podgląd dwóch różnych wyników. Pierwszy pokazuje wynik bez odwróconej listy. Linie łączą się pionowo z sąsiednimi punktami. Natomiast odwrócona lista powoduje połączenie wszystkich punktów w kolejności odwrotnej na drugiej liście.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Węzeł List.ShiftIndices jest dobrym narzędziem do tworzenia skrętów lub wzorców śrubowych albo do innych podobnych manipulacji danymi. Ten węzeł przesuwa elementy na liście o podaną wartość indeksu.
W tym samym procesie, w którym występuje odwrócona lista, wstaw węzeł List.ShiftIndices do węzłów Curve.PointAtParameter i Line.ByStartPointEndPoint.
Używając węzła Code Block, określ wartość „1”, aby przesunąć listę o jeden indeks.
Zauważmy, że zmiana jest subtelna, ale wszystkie linie w dolnym węźle Watch3D przesunęły się o jeden indeks podczas łączenia się z drugim zestawem punktów.
Po zmianie wartości w węźle Code Block na większą, na przykład „30”, zauważamy znaczną różnicę w liniach ukośnych. W tym przypadku przesunięcie działa jak obiektyw aparatu, tworząc skręt w oryginalnej formie walcowej.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Węzeł List.FilterByBooleanMask usuwa niektóre elementy w oparciu o listę wartości logicznych lub wartości odczytywanych jako „true” lub „false”.
Aby utworzyć listę wartości odczytywanych jako „true” lub „false”, musimy wykonać nieco więcej pracy.
Używając węzła Code Block, zdefiniuj wyrażenie ze składnią:
0..List.Count(list);
. Połącz węzeł Curve.PointAtParameter z wejściem list. Przeanalizujemy tę konfiguracje dokładniej w rozdziale dotyczącym węzła Code Block, ale wiersz kodu w tym przypadku tworzy listę reprezentującą każdy indeks węzła Curve.PointAtParameter.Używając węzła %** (moduł)**, połącz wyjście węzła Code Block z wejściem x oraz wartość 4 z wejściem y. Spowoduje to zwrócenie reszty z dzielenia listy indeksów przez 4. Węzeł modułu jest bardzo przydatny podczas tworzenia szyku. Wszystkie wartości będą odczytywane jako możliwe reszty z dzielenia przez 4, czyli 0, 1, 2 i 3.
Na podstawie węzła %** (moduł)** wiemy, że wartość 0 oznacza, iż indeks jest podzielny przez 4 (0, 4, 8 itd...). Za pomocą węzła == możemy sprawdzić tę dzielność, testując tę pozycję pod kątem wartości „0”.
Węzeł Watch pokazuje tylko, że mamy wzorzec true/false, który wygląda następująco: true,false,false,false....
Używając tego wzorca true/false, utwórz połączenie z wejściem mask dwóch węzłów List.FilterByBooleanMask.
Połącz węzeł Curve.PointAtParameter z każdym wejściem list węzła List.FilterByBooleanMask.
Wyjścia węzła Filter.ByBooleanMask to „in” oraz „out”. Wyjście „in” reprezentuje wartości, które miały wartość maski „true”, a wyjście „out” — wartość maski „false”. Podłączając wyjścia „in” do wejść startPoint i endPoint węzła Line.ByStartPointEndPoint, utworzyliśmy przefiltrowaną listę linii.
Węzeł Watch3D pokazuje, że mamy mniej linii niż punktów. Wybraliśmy tylko 25% węzłów, filtrując tylko wartości true.