2016-07-31 7 views
5

मेरे पास एक सैद्धांतिक समस्या है - इसके प्रारंभिकरण के दौरान हैश तालिका का संदर्भ कैसे देना है, उदाहरण के लिए, किसी सदस्य के पहले से निर्दिष्ट सदस्यों की गणना करने के लिए।पावरशेल हैशटेबल - प्रारंभिकरण के दौरान स्वयं संदर्भ

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 

कोई विचार यह कैसे करना है? क्या यह वास्तव में संभव है?

संपादित करें: यह मेरा समाधान था:

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

उत्तर

5

यह ऑब्जेक्ट प्रारंभकर्ता वाक्य रचना मुझे डर लग रहा का उपयोग कर संभव नहीं होगा। हालांकि चर का उपयोग करना संभव है, ऑब्जेक्ट बनाने से पहले आपको मानों की गणना करना होगा।

+0

यह उत्तर आगे बढ़ रहा है :-( – Honzajscz

1

मैं इस सिफारिश कर सकते हैं नहीं है, लेकिन आप प्रारंभकर्ता दो बार या उससे अधिक पुनरावृति कर सकते हैं:

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

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

सुनिश्चित करें कि सभी गणना idempotent हैं, अर्थात पुनरावृत्तियों की एक संख्या पर निर्भर नहीं है।

+0

एक दिलचस्प समाधान - थोड़ा अजीब लेकिन मूल :-) – Honzajscz

संबंधित मुद्दे