在这个假设的世界中,让我们说有一所学校提供A到Z课程。为了毕业,你只需要在如此多的某些课程中获得这么多时间。这是以这种方式记录的(数字=小时,字母=类):
Sunday 01/10/15 - 2A, 5H, 3Z
Monday 01/11/15 - 2A, 5Z, 5B
Wednesday 01/15/15 - 2A, 4Y, 6R
在学生的个人记录结束时,它会将所有具有匹配字母的数字组合在一起,从而显示每个班级的小时总数。
Sunday 01/15 - 2A, 5H, 3Z
Monday 02/15 - 2A, 5Z, 5B
Wednesday 01/15/15 - 2A, 4Y, 6R
6A, 5B, 5H, 6R, 4Y, 8Z.
虽然我很乐意导入数据和排序数据,但我很难弄清楚如何编写脚本以添加共享相同字母的所有数字。如果这些数据长达数百行,并且在这些行中有三个2B实例,我希望能够选择那些并向我显示6B。我错过了什么?我使用错误的工具来完成工作吗?
答案 0 :(得分:1)
你想要的是一本总和字典。在Powershell中,这将是一个总和的哈希表。每次看到一封信,都要在顶级哈希表中查找,看看它是否在那里。如果没有为该字母创建总和并将其添加到哈希表中。
完成后,您可以将密钥带到哈希表并对其进行排序,然后将所有字母,和对打印出来作为键值对。
我会为此写一些代码,但我需要先喝咖啡:)。
这就是......
$slst = ("2A","5H","3Z","2A","5Z","5B","2A","4Y","6R")
$sums = @{}
foreach($s in $slst)
{
$skey = $s[1]
$sval = $s[0] - 48
$sums[$skey] += $sval
}
$sums.GetEnumerator() | Sort-Object Name
注意之前有一个更长的版本,但有人指出你不需要在powershell中初始化词典表达。