“它有效 - 但这是最佳做法吗?”题。在Perl中,有一种紧凑的方式来跟踪文件中发现的字符串的出现:将它们存储在哈希表中。例如:
$HashTable{'the string in question'}++;
Perl将密钥the string in question
的值递增多次。它可以在跟踪事件发生的同时确保独特的“命中”。只是乱搞,我发现我可以用Powershell做同样的事情:
$HashTable['a']++
甚至是
$Hashtable.a++
(哪种让我感到惊讶 - 甚至是)
$Hashtable."this is a key"++
确定,所以它有效。但是,在Powershell中有一种方法被认为是更好的做法吗?
答案 0 :(得分:6)
您的方法看起来非常好,至少对于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
输出:
Name Value
---- -----
a 2
------------------------
a 1
A 1
在C#中使用Dictionary<string, int>
可能是一种“更好的做法”。它也可以在PowerShell中使用,但它不太可能使PowerShell中的“更好”。
PowerShell-ish解决方案可能使用Group-Object -NoElement
。这是一种更好的方法还是实践?我不知道。这取决于一些因素,包括偏好。这是一个例子:
'a', 'A', 'foo', 'foo' , 'bar' | Group-Object -NoElement
输出:
Count Name
----- ----
2 a
2 foo
1 bar