Alexey
Alexey

Reputation: 1

How create multidimensional dynamic array in powershell

How i can create array like:

$a -> [1] -> 
             [1] = value1
             [2] = value2
             .................
             [n] = valueN
      [2] -> 
             [1] = value1
             [2] = value2
             .................
             [n] = valueN

and so on. Thank you

i have tried like this:

 $b = @{}

$b[0][0] = 1

$b[0][1] = 2

$b[0][2] = 3

$b[1][0] = 4

$b[1][1] = 5

$b[1][2] = 6

$b

But it doesn't give the required output

Upvotes: 0

Views: 1907

Answers (3)

js2010
js2010

Reputation: 27576

The Windows Powershell in Action answer.

$2d = New-Object -TypeName 'object[,]' -ArgumentList 2,2

$2d.Rank
#2

$2d[0,0] = "a"
$2d[1,0] = 'b'
$2d[0,1] = 'c'
$2d[1,1] = 'd'
$2d[1,1]
#d

# slice
$2d[ (0,0) , (1,0) ]
#a
#b

# index variable
$one = 0,0
$two = 1,0
$pair = $one,$two
$2d[ $pair ]
#a
#b

Upvotes: 0

f6a4
f6a4

Reputation: 1782

You could use the class approach as well I would prefer:

Add-Type -AssemblyName System.Collections

# Create class with needed members

class myListObject {
    [int]$myIndex
    [System.Collections.Generic.List[string]]$myValue = @()
}

# generic list of class

[System.Collections.Generic.List[myListObject]]$myList = @()

#create and add objects to generic list

$myObject = [myListObject]::new() 
$myObject.myIndex = 1
$myObject.myValue = @( 'value1', 'value2' )

$myList.Add( $myObject )

$myObject = [myListObject]::new() 
$myObject.myIndex = 2
$myObject.myValue = @( 'value3', 'value4' )

$myList.Add( $myObject )


# search items

$myList | Where-Object { $_.myIndex -eq 1 } | Select-Object -Property myValue


$myList | Where-Object { $_.myValue.Contains('value3') } | Select-Object -Property myIndex

Upvotes: 0

Bernard Moeskops
Bernard Moeskops

Reputation: 1283

I think this has been posted multiple times, but simply declare the array and give it values:

[array]$1 = "value1","value2"
[array]$2 = "value1","value2"

[array]$a = $1,$2

$a[0][0] 

will output -> value1 from the first

Please note that declaring the array with [array] is for clarifiying, it is not necessary. If you add comma-seperated values the variable automatically is an array.

EDIT: What you have tried is a hashtable. A hashtable contains a key and a value. An array is only a list of values. A hashtable is created as follows:

 $b = @{
    1 = @{
        1 = "value1"
        2 = "value2"
    }
    2 = @{
        1 = "value1"
        2 = "value2"
    }
    3 = "value3"
 }

$b

As you can see, you can add as many sublevels as you like. To show the value of the first "value1" type:

$b[1].1

Upvotes: 1

Related Questions