Ich möchte ein mehrdimensionales Array @a
in ein Array klonen @b
.
Ich habe den intuitivsten Weg eingeschlagen und mir Folgendes ausgedacht:
my @a = [0, 0, 0], [0, 0, 0], [0, 0, 0];
my @b = @a.clone;
@a[0][1] = 1;
@b[1][0] = 1;
say '@a : ' ~ @a.gist;
say '@b : ' ~ @b.gist;
und der Ausdruck ist:
@a : [[0 1 0] [1 0 0] [0 0 0]]
@b : [[0 1 0] [1 0 0] [0 0 0]]
Das heißt, dass die beiden Arrays @a und @b gebunden sind?
Fragen:
- Warum Array @a an Array @b gebunden ist (Was ist der Zweck der Klonmethode in dieser Situation? Wir wissen, dass sich Klone so verhalten, wie es für eindimensionale Arrays beabsichtigt ist).
- Wie kann ich @a wirklich zu @b klonen (mehrdimensional)?
- Welches ist der effizienteste (zeitlich begrenzte) Weg, dies zu tun?
Scalar
(Groß- ‚S‘) bedeuten Raku Standard in skalare eingebauten Behälter . AScalar
ist niemals ein Array; aber es kann enthalten (ein Hinweis auf) einArray
. Eine Zuweisung@a[0][1] = ...
ändert weder den Skalar nochScalar
@a[0]
und legt auch keine neueArray
in denScalar
Container@a[0]
. Es ändert nur den Wert, der im 2.Scalar
in dem vorhandenen WertArray
in der vorhandenenScalar
Bindung an gehalten wird@a[0]
.@a
und@b
sind nicht gebunden . Sie enthalten einfach die gleichen Dinge. Dasclone
rekursiert nicht und klont nur das äußere Array.Ein Weg, um das zu erreichen, was Sie wollen, wäre
quelle