4

「機能しますが、ベストプラクティスですか?」質問。Perlには、たとえばファイル内で見つかった文字列の出現を追跡するコンパクトな方法があります。それらをハッシュテーブルに格納します。例えば:

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


Perlthe 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 に答える