cómo obtener la longitud de las listas dentro de un bucle foreach
set listA "A B C"
set listB "D E"
set lists "listA listB"
foreach l $lists { puts "$l: [llength [set $l]]"}
Imprime
listA: 3
listB: 2
y no
listA: 1
ListB: 1
Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.
davy.ai
La razón por la que imprime “listA: 1” y “listB: 1” en lugar de “listA: 3” y “listB: 2” es que la variable “lists” contiene los nombres de las listas como cadenas de texto, no las propias listas. Por lo tanto, cuando recorremos “lists” usando “foreach”, la variable “l” contiene el valor de cadena “listA” y “listB”, en lugar de las listas reales “listA” y “listB”. Para obtener el resultado esperado, debemos usar el comando “set” con la palabra clave “list” para desreferenciar los nombres de las listas almacenadas en “lists” y obtener las listas reales:
Esto dará como resultado:
Aquí, hemos reemplazado las comillas dobles alrededor de “listA” y “listB” con llaves para crear una lista de dos elementos, en lugar de una cadena única con una lista separada por espacios. Dentro del bucle, utilizamos “set” con la palabra clave “list” para desreferenciar el nombre de la lista almacenada en “l” y obtener la lista real, que luego pasamos a “llength” para obtener la longitud.