【发布时间】:2018-01-18 12:12:01
【问题描述】:
嗨,我正在编写 perl 中的脚本,我已经看到了置换代码,但我的问题是我有一个数组,其值为 @array =(john, cena, barrack, obama, donald, trump) 在索引 0 处的值是名字,1 是姓,2 是名字,3 是姓,依此类推。所以应该是这样的
john cena
barrack obama
donald trump
我需要这个组合的排列
barrack obama
donald trump
john cena
donald trump
john cena
barrack obama
像这样 这是怎么做到的!! 我已经用硬编码做到了这一点,但我需要让它更通用!
my $i=0;
my @array;
print $fh_testcases "\n${indentation}${tab}$tab'$intent_json_result': [[\n";
while ((my $key, my $value) = each %{@{$p_phrase_recogslots}[${speech_phrase_counter}-1]}) {
$array[$i]= $key;
$array[$i+1]= $value;
$i= $i+2;
}
if ($i == 6){
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[0]\", \"$array[1]\"),\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[2]\", \"$array[3]\"),\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[4]\", \"$array[5]\"),\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"origin\", \"onboard\")\n"; #TODO handle offboard cases
print $fh_testcases "${indentation}${tab}$tab]]\n";
print $fh_testcases "${indentation}${tab}},\n";
print $fh_testcases "${indentation}${tab}\{'$intent_json_result': [[\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[4]\", \"$array[5]\"),\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[2]\", \"$array[3]\"),\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[0]\", \"$array[1]\"),\n";
print $fh_testcases "${indentation}${tab}\{'$intent_json_result': [[\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[4]\", \"$array[5]\"),\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[0]\", \"$array[1]\"),\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[2]\", \"$array[3]\"),\n";
print $fh_testcases "${indentation}${tab}\{'$intent_json_result': [[\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[2]\", \"$array[3]\"),\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[4]\", \"$array[5]\"),\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[0]\", \"$array[1]\"),\n";
print $fh_testcases "${indentation}${tab}\{'$intent_json_result': [[\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[2]\", \"$array[3]\"),\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[0]\", \"$array[1]\"),\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[4]\", \"$array[5]\"),\n";
print $fh_testcases "${indentation}${tab}\{'$intent_json_result': [[\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[0]\", \"$array[1]\"),\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[4]\", \"$array[5]\"),\n";
print $fh_testcases "${indentation}${tab}$tab$tab(\"$array[2]\", \"$array[3]\"),\n";
}
【问题讨论】:
-
“排列”将打印这六个单词可以排列的所有可能顺序,例如“obama john donald cena barrack trump”。那是你真正想要的吗?因为我觉得它不是。
-
只需将
"john cena"、"barack obama"和"donald trump"分别放入一个字符串中,然后将您已经拥有的置换算法应用于该三元素数组。你有一个算法,不是吗? -
请edit您的问题并包含一个工作程序。现在您缺少数据的变量定义,因此我们无法运行您的代码。有关详细信息,请参阅minimal reproducible example。
-
离题,但一般来说可能有帮助,当你编写 Perl 代码时,如果你在字符串文字中转义字符,你可能做错了。您可以使用
qq运算符将任何定界符作为内插引号。如果你记得 print 需要一个参数列表并打印它们,你的 print 语句也可以变得不那么混乱。所以你凌乱的打印语句可以减少到print $fh $indentation, $tab x $indent_level, qq("$word_list[1]");更多信息见perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators
标签: perl permutation