Как создать многомерный динамический массив в powershell - PullRequest
0 голосов
/ 04 июля 2019

Как я могу создать массив, как:

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

и так далее.Спасибо

Я пытался так:

 $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

Но это не дает требуемый результат

Ответы [ 3 ]

1 голос
/ 04 июля 2019

Я думаю, что это было опубликовано несколько раз, но просто объявите массив и присвойте ему значения:

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

[array]$a = $1,$2

$a[0][0] 

выведет -> значение1 с первого

Обратите внимание, что объявление массива с помощью [array] предназначено для пояснения, в этом нет необходимости. Если вы добавляете запятые значения, переменная автоматически становится массивом.

EDIT: То, что вы пробовали, является хеш-таблицей. Хеш-таблица содержит ключ и значение. Массив - это только список значений. Хеш-таблица создается следующим образом:

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

$b

Как видите, вы можете добавить столько подуровней, сколько захотите. Чтобы показать значение первого типа «value1»:

$b[1].1
0 голосов
/ 04 июля 2019

Ответ Windows PowerShell в действии.

$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
0 голосов
/ 04 июля 2019

Вы также можете использовать классовый подход, я бы предпочел:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...