2012-10-12 81 views
7

¿Cómo se trabaja con arreglos de longitud dinámica (ArrayLists/Lists) en Powershell? Básicamente, quiero una matriz 2D donde se desconoce la longitud del índice más externo.¿Cómo lleno una matriz de longitud desconocida en Powershell?

Intenté inicializar una matriz con $array = @(), pero obtendría excepciones de índice fuera de rango al abordar algo en esto. Luego intenté usar el + = operando, como lo leí en un artículo, pero eso daría como resultado la concatenación de cadenas y no la adición de elementos.

Ejemplo:

$array = @() 
$array += @("Elem1x", "Elem1y") 
$array += @("Elem2x", "Elem2y") 
Echo $array[0][0] 

salida: "E" en lugar de "Elem1x";

Respuesta

8

Trate de esta manera:

$array = @() 
$array += ,@("Elem1x", "Elem1y") 
$array += ,@("Elem2x", "Elem2y") 
$array[0][0] 
+0

¡He editado mi respuesta porque estaba en un gran error! –

+0

¿Alguien puede explicar lo que la coma realmente hace? – Nilzor

+0

@Nilzor, lea aquí: http://blogs.msdn.com/b/powershell/archive/2007/01/23/array-literals-in-powershell.aspx –

9

respuesta de Christian es la forma PowerShell para ir y funciona muy bien para la mayoría de los casos (pequeñas matrices de tamaño medio). Si su matriz es grande, puede considerar utilizar ArrayList por motivos de rendimiento. Es decir, cada vez que usa += con una matriz, PowerShell tiene que crear una nueva matriz y copiar los contenidos anteriores en la nueva matriz y asignar la nueva matriz a la variable. Eso es porque las matrices .NET son de tamaño fijo. He aquí cómo usted puede hacer esto utilizando un ArrayList:

$list = new-object system.collections.arraylist 
$list.Add(("Elem1x", "Elem1y", "Elem1z")) > $null 
$list.Add(("Elem2x", "Elem2y")) > $null 
$list[0][0] 

cierto lo que el operador hace += depende del tipo del objeto en el lado izquierdo del operador. Si es una cadena, entonces obtienes concatenación de cadenas. Si el objeto es una matriz, entonces el lado derecho se agrega a la matriz (a través de crear nueva matriz/copia).

+1

También agregaré que en mi experiencia, una multi-dimensional array es casi siempre inferior a otra estructura de datos, como se sugiere aquí una lista de matrices de matrices. Pero puedo tener prejuicios contra las matrices multidimensionales :) – EBGreen

Cuestiones relacionadas