搜索哈希表中的键和平均关联值Powershell

时间:2015-04-02 21:15:53

标签: powershell

所以我有一个脚本,我试图获取测试名称并将其存储在哈希表中作为键,然后获得高测试分数和低测试分数并将这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值的测试名称。然后平均存储在值部分中的两个测试分数。

2 个答案:

答案 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个值,则可以删除。