【发布时间】:2014-07-14 18:36:55
【问题描述】:
我正在尝试创建一个包含 1-8 个“单词”的“句子”列表,提供了一个单词列表,我不关心唯一性,因为我可以稍后过滤掉重复项。我认为递归函数是最好的方法,尤其是在我想在以后更改最大长度的情况下。
当我运行这段代码时,我得到了一个空结果。当我调试并单步执行时,我发现 $sents 会在 return 语句之前包含数据,然后在返回到第一个 else 语句中的 $sents 变量后立即没有数据。
这是我为 PowerShell 编写的第二个递归函数,但都没有用。第一个我最终崩溃并编写了 4 个嵌套的 foreach 语句。这将是 8 个嵌套语句(我不希望这样做),只是为了构建一个字符串数组,以便我可以处理它们。
任何帮助将不胜感激。谢谢!
function make-sentences ($ws, $ml, [String[]] $sent = @(), [String[]] $sents = @()) {
[String[]] $nws = @()
$sent += $ws[0]
if ($sent.length -ge $ml) {
$sents += ($sent -join ",")
return $sents
} elseif ($ws.length -le 1) {
$sents += ($sent -join ",")
return $sents
} else {
for ($i = 1; $i -lt $ws.length; $i++) { $nws += $ws[$i] }
$sents += make-sentences $nws $ml $sent $sents
}
[String[]] $nws = @()
if ($ws.length -le 1) {
$sents += ($sent -join ",")
return $sents
} else {
$sent = @()
for ($i = 1; $i -lt $ws.length; $i++) { $nws += $ws[$i] }
$sents += make-sentences $nws $ml $sent $sents
}
}
$words = ("acfj","acfk","adfk","aefj","aefk","aegi","aehi","afgh")
[String[]] $sentences = make-sentences $words 8
$sentences
【问题讨论】:
-
老实说,我很难说出你的方法是什么。看来您应该在 while 循环中执行此操作。但是,有几件事很突出。 1 - 您不能更改输入的非对象变量,除非它们是引用变量。 2 - 这对于手头的任务来说过于复杂:)
标签: powershell recursion return