4

“它有效——但它是最佳实践吗?” 问题。在 Perl 中,有一种紧凑的方法可以跟踪在文件中找到的字符串的出现情况:将它们存储在哈希表中。例如:

$HashTable{'the string in question'}++;


Perl 增加 key 的值的the string in question次数与完成的次数一样多。它在跟踪事件发生的同时确保独特的“命中”。随便看看,我发现我可以用 Powershell 做很多相同的事情:

$HashTable['a']++甚至
$Hashtable.a++(这让我感到惊讶——甚至)
$Hashtable."this is a key"++


好的,所以它起作用了。但是 Powershell 中是否有一种被认为是更好的做法的方法?

4

1 回答 1

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 的解决方案可能是使用Group-Object -NoElement. 这是更好的方法还是实践?我不知道。这取决于一些因素,包括偏好。这是示例:

'a', 'A', 'foo', 'foo' , 'bar' | Group-Object -NoElement

输出:

Count Name
----- ----
    2 a
    2 foo
    1 bar
于 2012-11-13T12:57:32.763 回答