所以我有一个脚本,我试图获取测试名称并将其存储在哈希表中作为键,然后获得高测试分数和低测试分数并将这2作为值存储。然后,我想采取并允许用户搜索测试名称并查看高分和低分。我目前所拥有的是:
$testInfo = @{}
$testName = read-host "Please enter the name of the test"
$testHigh = read-host "Please enter the high score of the test"
$testLow = read-host "Please enter the low score of the test"
$testInfo.Add($testName, $testHigh + " " + $testLow
$search = read-host "Please enter the name of the test you'd like to view the average score of"
此代码成功地将高分和低分存储到该测试名称,但我需要一种方法来查找具有$ search值的测试名称。然后平均存储在值部分中的两个测试分数。
答案 0 :(得分:6)
这取决于你想如何使用它,但有几种方法:
$testInfo.ContainsKey($search)
如果密钥存在,那将返回$true
/ $false
。
您还可以遍历键:
foreach($key in $testInfo.Keys.GetEnumerator()) {
$key
}
你可以参考它:
$testInfo[$search]
# or
$testInfo.$search
就像我说的那样取决于你想如何引用/使用它。
答案 1 :(得分:0)
根据您的要求,使用特定的嵌套哈希表或自定义对象更容易实现此目的。对于嵌套哈希表,您需要将测试分数添加为测试名称值的附加哈希表。之后,您将遍历所有键以进行匹配的键搜索,然后创建平均值。
由于测试分数值保存为字符串,因此将$ avg变量定义为整数非常重要。
$testInfo = @{}
$testName = read-host "Please enter the name of the test"
$testHigh = read-host "Please enter the high score of the test"
$testLow = read-host "Please enter the low score of the test"
$nest = @{High=$testHigh; Low=$testLow}
$testInfo.Add($testName, $nest)
$search = read-host "Please enter the name of the test you'd like to view the average score of"
$avg = 0
$count = 0
$testInfo[$search].GetEnumerator() | % { $avg += $_.value; $count++ }
Write-Host "The average score for test $search is $($avg/$count)."
我包含了一个计数,但是如果您当然打算输入2个值,则可以删除。