私はまだ順列一致で作業しようとしており、誰かがそれを行うより良い方法があるのだろうかと思います。配列内のすべてのパターンを任意の順序で一致させたい、つまり、配列内のアイテム(文字列やその他のオブジェクト)の順列にマッチさせたい。たとえば、arrayが(1,2,3)の場合、文字列に1と2と3が任意の順序で含まれる場合はtrueです。つまり、文字列に(1,2,3)の順列が含まれている場合はtrueです。perl6並べ替え一致
私が今持っていることはこれです:
my @x = < one eins uno yi two zwei dos er one one one two two two >;
my @z = < one eins uno yi two zwei dos er one one one two two two foo >;
my $y = "xxx one eins uno yi two zwei dos er xxx";
sub matchAllWords($aString, @anArray) {
my $arraySize = @anArray.elems;
if $arraySize == 0 { False; }
elsif $arraySize == 1 {
($aString.match(/:i "@anArray[0]" /)).Bool;
} else {
my $firstCheck = ($aString.match(/:i "@anArray[0]"/)).Bool;
if $firstCheck {
$firstCheck
and
(matchAllWords($aString, @anArray[1..*]));
} else {
return False;
}
}
}
say matchAllWords($y, @x);
# result is True, but it should NOT be True because $y should not
# match permutations of @x which contains multiple identical elements
# of "one" and "two"
say matchAllWords($y, @z); # False as expected;
の問題は私の関数は、配列内のすべてのユニークワードと一致していることですが、重複した単語の順列を区別することができません。単語が一致しているかどうかを判断するためにコードを追加することはできますが、単純な考え方である "置換一致"を達成するためのコードは多くありません。助言がありますか?みんなの意見をもとに感謝
達成したいことは私には分かりません。配列 'n '回に含まれるすべての要素が正確に' n'回の文字列にも現れるかどうかチェックしますか?または、他の何か? – smls
あなたは見て、 'バッグ'と演算子を設定しましたか?あなたが何らかの形で2つのバッグを比較したいと思うように感じます(アイデンティティ/サブセット)。それはあなたが欲しいものですか? –
両方のリストを並べ替えることはできませんでしたか? –