Powershell 对哈希表的所有值求和的更快方法
对哈希表的所有值求和的更快方法是什么Powershell 对哈希表的所有值求和的更快方法,powershell,Powershell,对哈希表的所有值求和的更快方法是什么 $a = @{} $a.Add("Test1",1) $a.Add("Test2",2) $a.Add("Test3",3) 预期结果:6 类似的东西,但不起作用: $a.GetEnumerator() | %{($_.Value | Measure-Object -Sum).Sum} 我将创建一个包含10000多个条目的哈希表,因此我需要更快的方法 谢谢由于您不需要使用GetEnumerator() 如果没有,我认为您可以将这两个答案中最好的结合起来度
$a = @{}
$a.Add("Test1",1)
$a.Add("Test2",2)
$a.Add("Test3",3)
预期结果:6
类似的东西,但不起作用:
$a.GetEnumerator() | %{($_.Value | Measure-Object -Sum).Sum}
我将创建一个包含10000多个条目的哈希表,因此我需要更快的方法
谢谢由于您不需要使用
GetEnumerator()
如果没有,我认为您可以将这两个答案中最好的结合起来
度量对象
的速度大约是枚举和添加值的两倍
证明:
PS C:\> $a = @{}
PS C:\> for ($i=1; $i -lt 50000; $i++) { $a["$i"] = (Get-Random) % 5 }
PS C:\> 1..5 | % {
>> Measure-Command {
>> $total = 0
>> $a.GetEnumerator() | % { $total += $_.value }
>> } | select -Expand TotalMilliseconds
>> }
>>
1075,2542
1081,5379
1082,1324
1074,9834
1076,5663
PS C:\> 1..5 | % {
>> Measure-Command {
>> ($a.Values | Measure-Object -Sum).Sum
>> } | select -Expand TotalMilliseconds
>> }
>>
577,9536
565,8076
579,8534
572,4747
568,8108
PS C:\>$a=@{}
PS C:\>对于($i=1;$i-lt 50000;$i++){$a[“$i”]=(随机获取)%5}
PS C:\>1..5 |%{
>>测量命令{
>>$total=0
>>$a.GetEnumerator()|%{$total+=$\uU3.value}
>>}|选择-展开总毫秒数
>> }
>>
1075,2542
1081,5379
1082,1324
1074,9834
1076,5663
PS C:\>1..5 |%{
>>测量命令{
>>($a.Values |度量对象-总和)。总和
>>}|选择-展开总毫秒数
>> }
>>
577,9536
565,8076
579,8534
572,4747
568,8108
第一种方法速度更快,并且您可以在流中累积$sum
PS C:\> $a = @{}
PS C:\> for ($i=1; $i -lt 50000; $i++) { $a["$i"] = (Get-Random) % 5 }
PS C:\> 1..5 | % {
>> Measure-Command {
>> $total = 0
>> $a.GetEnumerator() | % { $total += $_.value }
>> } | select -Expand TotalMilliseconds
>> }
>>
1075,2542
1081,5379
1082,1324
1074,9834
1076,5663
PS C:\> 1..5 | % {
>> Measure-Command {
>> ($a.Values | Measure-Object -Sum).Sum
>> } | select -Expand TotalMilliseconds
>> }
>>
577,9536
565,8076
579,8534
572,4747
568,8108
(measure-command {
$Sum = 0
$a = @{}
$sum += ($a.Test = 1)
$sum += ($a.Test2 = 2)
$sum += ($a.Test3 = 3)
}).TotalMilliseconds
(Measure-Command {
$a = @{}
$a.Add("Test1",1)
$a.Add("Test2",2)
$a.Add("Test3",3)
}).TotalMilliseconds
0.2585
0.4121