순열 일치 작업을 계속하려고합니다. 누구에게나 더 나은 방법이 있는지 궁금합니다. 어떤 순서로든 배열의 모든 패턴을 일치 시키려합니다. 즉, 배열의 항목 (문자열 또는 기타 객체)의 순열을 일치시킵니다. 예를 들어 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;
문제점 내 함수가 배열에 모든 고유 단어를 일치하지만, 중복 단어의 순열을 구별 할 수 없습니다 :
는 내가 지금 가지고있는 것은 이것이다. 단어가 일치하는지 더 많은 코드를 추가 할 수 있지만 "순열 일치"라는 단순한 아이디어를 달성하기위한 코드는 더 이상 필요하지 않습니다. 어떤 제안? Y
, 문자열, 모두 포함
테스트하는 것이 : 감사
달성하고자하는 것이 분명하지 않습니다. 배열'n' 번에 포함 된 모든 요소가 정확하게'n' 번 문자열에 나타나는지 확인하고 싶습니까? 또는 다른 것? – smls
당신은 보았고 '봉지'와 연산자를 설정 했습니까? 당신이 두 가지 가방을 어떤면에서 (신분/하위 집합) 비교하고 싶다는 느낌. 너가 원하는게 그거야? –
두 목록을 모두 정렬 할 수 없습니까? –