43 votes

Tableaux multidimensionnels de Powershell

J'ai une façon de faire des tableaux dans d'autres langages comme ceci :

$x = "David"
$arr = @()

$arr[$x]["TSHIRTS"]["SIZE"] = "M"

Cela génère une erreur.

1 votes

Comme cela a été souligné précédemment, le code que vous avez posté est un dictionnaire ou un hachage, et non un tableau commun.

1voto

Franco Pettigrosso Points 1191

Vous pouvez également utiliser System.Collections.ArrayList pour créer un tableau de tableaux ou ce que vous voulez. Voici un exemple :

$resultsArray= New-Object System.Collections.ArrayList 
[void] $resultsArray.Add(@(@('$hello'),2,0,0,0,0,0,0,1,1))
[void] $resultsArray.Add(@(@('$test', '$testagain'),3,0,0,1,0,0,0,1,2))
[void] $resultsArray.Add("ERROR")
[void] $resultsArray.Add(@(@('$var', '$result'),5,1,1,0,1,1,0,2,3))
[void] $resultsArray.Add(@(@('$num', '$number'),3,0,0,0,0,0,1,1,2))

Un problème, si l'on peut appeler cela un problème, est que l'on ne peut pas fixer de limite. En outre, vous devez utiliser [void] ou le script va s'énerver.

1voto

ZEE Points 391

En utilisant la syntaxe .net (comme CB l'a indiqué ci-dessus)
vous ajoutez aussi de la cohérence à votre tableau...

si vous définissez un tableau...
et vous essayez de stocker différents types
Powershell vous "alertera" :

$a = New-Object 'byte[,]' 4,4
$a[0,0] = 111;    // OK
$a[0,1] = 1111;   // Error

Bien sûr, Powershell va vous "aider".
dans les conversions évidentes :

$a = New-Object 'string[,]' 2,2
$a[0,0] = "1111";   // OK
$a[0,1] = 111;      // OK also

1voto

FHC Points 53

Un autre fil de discussion a pointé ici sur la façon d'ajouter à un tableau multidimensionnel dans Powershell. Je ne sais pas s'il y a une raison de ne pas utiliser cette méthode, mais elle a fonctionné pour mes besoins.

$array = @()
$array += ,@( "1", "test1","a" )
$array += ,@( "2", "test2", "b" )
$array += ,@( "3", "test3", "c" )

1voto

Alex Points 21

J'ai trouvé une solution assez cool pour faire des tableaux dans un tableau.

$GroupArray = @()
foreach ( $Array in $ArrayList ){
    $GroupArray += @($Array , $null)
}
$GroupArray = $GroupArray | Where-Object {$_ -ne $null}

0voto

Bart Points 1

Carême d'en haut :

$arr = ConvertFrom-Csv @'
Name,Article,Size
David,TShirt,M
Eduard,Trouwsers,S
'@

Imprimez le $arr :

$arr

Name   Article   Size
----   -------   ----
David  TShirt    M
Eduard Trouwsers S

Sélectionnez maintenant "David".

$arr.Where({$_.Name -eq "david"})

Name  Article Size
----  ------- ----
David TShirt  M

Maintenant, si vous voulez connaître la taille de "David".

$arr.Where({$_.Name -eq "david"}).size

M

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X