這裏有一個替代實現:
function abbrev([string[]]$words) {
$abbrevs = @{}
foreach($word in $words) {
1..$word.Length |
% { $word.Substring(0, $_) } |
? { @($words -match "^$_").Length -eq 1 } |
% { $abbrevs.$_ = $word }
}
$abbrevs
}
到mjolinor的做法類似,它會檢查每個字每個字符串,將那些只有當前單詞匹配到的哈希表。
弗蘭克在評論中指出,你也可以簡單地保存所有的比賽,並使用非唯一條目選項之間的歧義:
$keywords = 'this','and','that'
$abbrevs = @{}
foreach($word in $keywords) {
1..$word.Length |
% { $word.Substring(0, $_) } |
% { $abbrevs.$_ = @($words -match "^$_") }
}
$abbrevs
Name Value
---- -----
an {and}
that {that}
and {and}
tha {that}
thi {this}
t {this, that}
th {this, that}
a {and}
this {this}
由於287]莪指出,這種匹配已經建成powershell:
function f([switch]$this, [switch]$that) {
if($this) { 'this' }
if($that) { 'that' }
}
> f -thi
this
> f -th
f : Parameter cannot be processed because the parameter name 'th' is ambiguous.
Possible matches include: -this -that.
At line:1 char:2
+ f <<<< -th
+ CategoryInfo : InvalidArgument: (:) [f], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : AmbiguousParameter,f
謝謝你不只是爲了答案,而是爲工作代碼。我是一個新手,仍在學習「思考PowerShell」。我遇到的第二種解決方案。 。 。 - 匹配投擲鍵「^ $ userResponse」。如果我得到不止一場比賽,那麼我收集了一個「你是什麼意思」的錯誤提示。 。 。如果我只有一個,請使用它。有趣的語言。 。 。它需要我花一段時間才能找到我的頭。 – Frank 2011-02-13 06:05:46