Trabajo con listas
Last updated
Last updated
Ahora que hemos establecido lo que es una lista, hablemos de las operaciones que podemos realizar en ella. Imagine una lista como un mazo de cartas. El mazo es la lista y cada carta representa un elemento.
Fotografía de Christian Gidlöf
¿Qué consultas se pueden realizar a partir de la lista? Esto permite acceder a las propiedades existentes.
¿Número de cartas del mazo? 52.
¿Número de palos? 4.
¿Material? Papel.
¿Longitud? 3,5" u 89 mm.
¿Anchura? 2,5" o 64 mm.
¿Qué acciones se pueden realizar en la lista? Estas acciones cambian la lista en función de una operación especificada.
Podemos barajar el mazo de cartas.
Podemos ordenar el mazo por valor.
Podemos ordenar el mazo por palo.
Podemos dividir el mazo.
Podemos dividir el mazo repartiendo manos individuales.
Podemos seleccionar una carta específica del mazo.
Todas las operaciones mencionadas anteriormente tienen nodos análogos de Dynamo para trabajar con listas de datos genéricos. En las lecciones siguientes, se muestran algunas de las operaciones fundamentales que podemos realizar en las listas.
Descargue el archivo de ejemplo. Para ello, haga clic en el vínculo siguiente.
En el Apéndice, se incluye una lista completa de los archivos de ejemplo.
La imagen siguiente es el gráfico base en el que se dibujan líneas entre dos círculos para representar operaciones de lista básicas. Exploraremos cómo administrar los datos de una lista y mostraremos los resultados visuales a través de las acciones de lista que aparecen a continuación.
Comience con un bloque de código con un valor de
500;
.Conéctelo a la entrada x de un nodo Point.ByCoordinates.
Conecte el nodo del paso anterior a la entrada origin de un nodo Plane.ByOriginNormal.
Con un nodo Circle.ByPlaneRadius, conecte el nodo del paso anterior en la entrada plane.
Mediante el bloque de código, designe un valor de
50;
para el radio. Este es el primer círculo que crearemos.Con un nodo Geometry.Translate, desplace el círculo hacia arriba 100 unidades en la dirección Z.
Con un nodo Code Block, defina un rango de diez números entre 0 y 1 con esta línea de código:
0..1..#10;
.Conecte el bloque de código del paso anterior a la entrada param de dos nodos Curve.PointAtParameter. Conecte Circle.ByPlaneRadius a la entrada "curve" del nodo superior y Geometry.Translate a la entrada curve del nodo situado debajo del mismo.
Con un nodo Line.ByStartPointEndPoint, conecte los dos nodos Curve.PointAtParameter.
Descargue el archivo de ejemplo. Para ello, haga clic en el vínculo siguiente.
En el Apéndice, se incluye una lista completa de los archivos de ejemplo.
El nodo List.Count es sencillo: cuenta el número de valores de una lista y devuelve ese número. Este nodo presenta más detalles cuando se trabaja con listas de listas, pero eso lo veremos en las secciones siguientes.
El nodo **List.Count ****** devuelve el número de líneas del nodo Line.ByStartPointEndPoint. En este caso, el valor es 10, lo que coincide con el número de puntos creados a partir del nodo Code Block original.
Descargue el archivo de ejemplo. Para ello, haga clic en el vínculo siguiente.
En el Apéndice, se incluye una lista completa de los archivos de ejemplo.
List.GetItemAtIndex es una forma fundamental de consultar un elemento de la lista.
En primer lugar, haga clic con el botón derecho en el nodo Line.ByStartPointEndPoint para desactivar su vista preliminar.
Con el nodo List.GetItemAtIndex, seleccionamos el índice "0" o el primer elemento de la lista de líneas.
Cambie el valor del control deslizante entre 0 y 9 para seleccionar un elemento diferente mediante List.GetItemAtIndex.
Descargue el archivo de ejemplo. Para ello, haga clic en el vínculo siguiente.
En el Apéndice, se incluye una lista completa de los archivos de ejemplo.
List.Reverse invierte el orden de todos los elementos de una lista.
Para visualizar correctamente la lista de líneas invertida, cree más líneas. Para ello, cambie el nodo Code Block a
0..1..#50;
.Duplique el nodo Line.ByStartPointEndPoint, inserte un nodo List.Reverse entre Curve.PointAtParameter y el segundo nodo Line.ByStartPointEndPoint.
Utilice los nodos Watch3D para obtener una vista preliminar de dos resultados diferentes. El primero muestra el resultado sin una lista invertida. Las líneas se conectan verticalmente con los puntos adyacentes. Sin embargo, la lista invertida conectará todos los puntos con la otra lista en el orden opuesto.
Descargue el archivo de ejemplo. Para ello, haga clic en el vínculo siguiente.
En el Apéndice, se incluye una lista completa de los archivos de ejemplo.
List.ShiftIndices es una buena herramienta para crear torsiones o patrones helicoidales, así como cualquier otra manipulación de datos similar. Este nodo desplaza los elementos de una lista un determinado número de índices.
En el mismo proceso que la lista inversa, inserte un nodo List.ShiftIndices en Curve.PointAtParameter y Line.ByStartPointEndPointPoint.
Mediante un bloque de código, designe un valor de "1" para desplazar la lista un índice.
Observe que el cambio es sutil, pero todas las líneas del nodo Watch3D inferior se han desplazado un índice al conectarlas al otro conjunto de puntos.
Al cambiar el bloque de código a un valor superior, por ejemplo "30", observamos una diferencia significativa en las líneas diagonales. El desplazamiento funciona como el iris de una cámara en este caso, creando una torsión en la forma cilíndrica original.
Descargue el archivo de ejemplo. Para ello, haga clic en el vínculo siguiente.
En el Apéndice, se incluye una lista completa de los archivos de ejemplo.
List.FilterByBooleanMask eliminará determinados elementos en función de una lista de operaciones booleanos o valores de "verdadero" o "falso".
Para crear una lista de valores de "verdadero" o "falso", necesitamos realizar un poco más de trabajo...
Mediante un bloque de código, defina una expresión con la sintaxis:
0..List.Count(list);
. Conecte el nodo Curve.PointAtParameter a la entrada list. Veremos más detalles sobre esta configuración en el capítulo del bloque de código, pero la línea de código en este caso nos proporciona una lista que representa cada índice del nodo Curve.PointAtParameter.Mediante un nodo %** (módulo)**, conecte la salida del bloque de código en la entrada x y un valor de 4 en la salida y. Esto nos dará el resto al dividir la lista de índices entre 4. El módulo es un nodo muy útil para la creación de patrones. Todos los valores serán los restos posibles de 4: 0, 1, 2, 3.
En el nodo %** (módulo)**, sabemos que el valor 0 significa que el índice es divisible por 4 (0, 4, 8, etc.). Mediante un nodo ==, podemos probar la divisibilidad frente a un valor de "0".
El nodo Watch muestra solo esto; disponemos de un patrón verdadero/falso que dice: verdadero,falso,falso,falso,falso....
Mediante este patrón verdadero/falso, conéctelo a la entrada "mask" de dos nodos List.FilterByBooleanMask.
Conecte el nodo Curve.PointAtParameter en cada una de las entradas "list" de los nodos List.FilterByBooleanMask.
Las salidas de Filter.ByBooleanMask son "in" y "out". "In" representa los valores que tenían un valor de máscara de "Verdadero (True)" mientras que "out" representa los valores que tenían un valor de "Falso (False)". Al conectar las salidas "in" a las entradas startPoint y endPoint de un nodo Line.ByStartPointEndPoint, hemos creado una lista filtrada de líneas.
El nodo Watch3D indica que hay menos líneas que puntos. Hemos seleccionado solo el 25 % de los nodos filtrando solo los valores verdaderos.