mar*_*017 4 powershell hashtable unique
"它有效 - 但它是最好的做法吗?" 题.在Perl中,有一种紧凑的方式来跟踪文件中发现的字符串的出现:将它们存储在哈希表中.例如:
$HashTable{'the string in question'}++;
Run Code Online (Sandbox Code Playgroud)
Perl会在the string in question完成此操作后多次递增key的值.它可以在跟踪事件发生的同时确保独特的"命中".只是乱搞,我发现我可以用Powershell做同样的事情:
$HashTable['a']++甚至
$Hashtable.a++(哪种让我感到惊讶 - 甚至)
$Hashtable."this is a key"++
好的,所以它有效.但是,Powershell中有一种方法被认为是更好的做法吗?
您的方法看起来非常好,至少对于PowerShell及其哈希表的帮助程序.请记住,定义的哈希表@{}不区分大小写.如果您需要区分大小写的哈希表,则创建它New-Object System.Collections.Hashtable.
例:
# case insensitive
$hash = @{}
$hash['a']++
$hash['A']++
$hash
'------------------------'
# case sensitive
$hash = New-Object System.Collections.Hashtable
$hash['a']++
$hash['A']++
$hash
Run Code Online (Sandbox Code Playgroud)
输出:
Name Value
---- -----
a 2
------------------------
a 1
A 1
Run Code Online (Sandbox Code Playgroud)
在C#中使用Dictionary<string, int>可能是一种"更好的做法".它也可能在PowerShell中,但它不太可能使PowerShell中的"更好".
PowerShell-ish解决方案可能正在使用Group-Object -NoElement.这是一种更好的方法还是实践?我不知道.这取决于一些因素,包括偏好.这是一个例子:
'a', 'A', 'foo', 'foo' , 'bar' | Group-Object -NoElement
Run Code Online (Sandbox Code Playgroud)
输出:
Count Name
----- ----
2 a
2 foo
1 bar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3239 次 |
| 最近记录: |