2016-07-31 23 views
5

Ich habe ein theoretisches Problem - wie eine Hash-Tabelle während seiner Initialisierung zu referenzieren, zum Beispiel, um ein Mitglied basierend anderen bereits genannten Mitgliedern zu berechnen.PowerShell HashTable - Selbstreferenzierung während der Initialisierung

Remove-Variable myHashTable -ErrorAction Ignore 
$myHashTable = 
@{ 
    One = 1 
    Two= 2 
    Three = ??? # following expressions do not work 
     # $This.One + $This.Two or 
     # $_.One + $_.Two 
     # $myHashTable.One + $myHashTable.Two 
     # ???? 
} 

$myHashTable.Three -eq 3 # make this $true 

Irgendwelche Ideen, wie man es macht? Ist es tatsächlich möglich?

Edit: Dies war meine Lösung:

$myHashTable = 
@{ 
    One = 1 
    Two= 2 
} 
$myHashTable.Three = $myHashTable.One + $myHashTable.Two 

Antwort

5

Dies wird die Objektinitialisierer Syntax Ich habe Angst, nicht möglich sein, verwenden. Während es möglich ist, Variablen zu verwenden, müssen Sie die Werte vor dem Erstellen des Objekts berechnen.

+0

Diese Antwort steht schon bevor :-(. – Honzajscz

1

ich nicht empfehlen kann, aber man kann den initializer zweimal oder mehr durchlaufen:

(0..1) | %{ 
    $a = @{ 
     One = 1 
     Two = $a.One + 1 
    } 
} 

(0..2) | %{ 
    $b = @{ 
     One = 1 
     Two = $b.One + 1 
     Three = $b.Two + 1 
    } 
} 

Sicherstellen, dass alle Berechnungen sind idempotent, das heißt nicht auf einer Anzahl von Iterationen ab.

+0

Eine interessante Lösung - ein bisschen seltsam, aber originell :-) – Honzajscz