我創建了一個包含簡單值的類:
Class Volumes {
[String]$ID
[String]$Name
}
現在我想創建另一個包含Volume物件陣列的類。
就像是:
Class Storage {
[String]$Name
[String]$IP
[Array]@Volumes # <- I know this is wrong, but I don't know how to do it
}
因此,2個問題:
- 如何在類中創建物件陣列?
- 一旦我建立了一個新的類物件,如何訪問/修改陣列成員
Storage?
提前謝謝,拉爾夫。
uj5u.com熱心網友回復:
下面的例子應該讓你現在開始!
你可以通過簡單地[]在型別后面定義一個物件陣列,所以Volume[]
片段底部有 2 個示例,它們也顯示了如何訪問卷資料。
Class Volume {
[String]$ID
[String]$Name
}
Class Storage {
[String]$Name
[String]$IP
[Volume[]]$Volumes
}
# Create a volume object
$volume1 = New-Object Volume
$volume1.ID = '1'
$volume1.Name = 'Data'
# Create another volume object
$volume2 = New-Object Volume
$volume2.ID = '2'
$volume2.Name = 'Log'
# Create a storage object
$storage = New-Object Storage
$storage.Name = 'SomeStorage'
$storage.IP = '0.0.0.0'
# Add the volume objects
$storage.Volumes = $volume1
$storage.Volumes = $volume2
# access a volume by name or index
$storage.Volumes | Where-Object {$_.Name -eq 'Data'}
$storage.Volumes[0]
zett42和santiago squarzon 的教育 NB
當您逐一添加許多元素時,陣列效率低下。您可能想看看 ArrayList / List 型別。
您可以改為[List[Volume]]$Volumes = [List[Volume]]::new()在您的 Storage 類中使用。確保將 ausing namespace System.Collections.Generic放在腳本的頂部。然后當你添加卷時$storage.Volumes.Add($volume1)
我為此做了一些性能測驗,我向物件添加了 10_000 個卷。陣列耗時 9.3 秒,串列耗時 0.93 秒,性能提升了 10 倍。
陣列 - 二次 - O(N2)
= 重新創建整個陣列,它將舊內容與新元素一起復制到新陣列中。
ArrayList - 常數 - O(1)
ArrayList 對于添加/洗掉的任意索引具有 O(n) 時間復雜度,但對于串列末尾的操作具有 O(1) 時間復雜度。
using namespace System.Collections.Generic
Class Volume {
[String]$ID
[String]$Name
}
Class Storage {
[String]$Name
[String]$IP
[List[Volume]]$Volumes = [List[Volume]]::new()
}
# Create volume objects
$volume1 = New-Object Volume
$volume1.ID = '1'
$volume1.Name = 'Data'
# Create another volume object
$volume2 = New-Object Volume
$volume2.ID = '2'
$volume2.Name = 'Log'
# Create a storage object
$storage = New-Object Storage
$storage.Name = 'SomeStorage'
$storage.IP = '0.0.0.0'
# Add the volume objects
$storage.Volumes.Add($volume1)
$storage.Volumes.Add($volume2)
# access a volume by name or index
$storage.Volumes | Where-Object {$_.Name -eq 'Data'}
$storage.Volumes[0]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/392522.html
