Ich habe eine Liste von Zahlen L. Es gibt eine andere Liste von Nummern M. Ich muss eine Liste L ' von Zahlen in sowohlL und M zurückgeben.Perl6: Elemente in einer Liste mit einer anderen Liste übereinstimmen
bearbeiten: Mathematisch Ich suche Multiset Kreuzung.
Beispiel:
L = 3,
1
, 4,1
, 5,9
,2
, 6
M =9
, 7,1
,2
,1
, 1
L ' = 9, 1, 2, 1
Ich schrieb die following code dafür:
my @some-numbers = 3, 1, 4, 1, 5, 9, 2, 6;
my @to-match = 9, 7, 1, 2, 1, 1;
my @matched;
my %histogram;
for @some-numbers -> $n { %histogram{$n}++ };
for @to-match -> $n {
next if not defined %histogram{$n};
if %histogram{$n} > 0 {
push @matched, $n;
%histogram{$n}--;
}
};
say @matched;
Während es das Ziel erreicht, ich habe mich gefragt, ob ein idiomatischer Perl6 Weg, dies zu tun, da war?
Einige Hintergrund: Ich habe versucht, Perl6 und Python zusammen zu lernen, und lösen Sie die gleichen Rätsel in beiden Sprachen. Python bot eine spezielle pleasing solution für das obige Problem. Um meine Anfänger Augen mindestens :)
Warum gibt es zwei und nicht drei Vorkommen von '1' in' L''? –
In Perl5 können Sie 'my% seen = map {$ _ => 1} @to_match; my @match = grep {exists $ seen {$ _}} @ some_numbers' –
Es tut uns leid, dass ich die Frage nicht genau formuliert habe. Ich erkannte, dass das, wonach ich suchte, die Schnittmenge [Multiset] (https://en.wikipedia.org/wiki/Multiset) war. Ich habe die Problembeschreibung bearbeitet, um das widerzuspiegeln. Danke :) – Anant