Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby zmniejszyć zapotrzebowanie na powiązania modyfikowalne, Q# obsługuje wyrażenia kopiowania i aktualizacji dla tablic, które umożliwiają dostęp do elementów za pośrednictwem indeksu lub zakresu indeksów.
Wyrażenia kopiowania i aktualizacji tworzy wystąpienie nowej tablicy ze wszystkimi elementami ustawionymi na odpowiednią wartość w oryginalnej tablicy, z wyjątkiem określonych elementów, które są ustawione na te zdefiniowane po prawej stronie wyrażenia.
Są one konstruowane przy użyciu operatoraternary w/<-; składnia w/ powinna być odczytywana jako powszechnie używana krótka notacja "with":
original w/ itemAccess <- modification
gdzie original jest wyrażeniem tablicy, itemAccess jest dowolnym wyrażeniem prawidłowym dla fragmentowania tablicy, a modification jest nową wartością lub wartościami. Konkretnie wyrażenie itemAccess może mieć typ Int lub Range. Jeśli itemAccess jest wartością typu Int, typ modification musi być zgodny z typem elementu tablicy. Jeśli itemAccess jest wartością typu Range, typ modification musi być taki sam jak typ tablicy.
Jeśli na przykład arr zawiera tablicę [0, 1, 2, 3], wówczas
-
arr w/ 0 <- 10jest tablicą[10, 1, 2, 3]. -
arr w/ 2 <- 10jest tablicą[0, 1, 10, 3]. -
arr w/ 0..2..3 <- [10, 12]jest tablicą[10, 1, 12, 3].
Jeśli chodzi o pierwszeństwo, operator kopiowania i aktualizacji jest lewo asocjacyjny i ma najniższy priorytet, a w szczególności niższy priorytet niż operator zakresu (..) lubternary operator warunkowy (?|).
Wybrana łączność po lewej stronie umożliwia łatwe tworzenie łańcuchów wyrażeń kopiowania i aktualizacji:
let model = ArrayConstructor()
w/ 1 <- alpha
w/ 3 <- gamma
w/ 5 <- epsilon;
Jeśli chodzi o dowolny operator tworzący wyrażenie tego samego typu co wyrażenie najbardziej lewe, odpowiedni instrukcji evaluate-and-reassign, jest dostępna.
Na przykład dwie następujące instrukcje umożliwiają osiągnięcie następujących wartości: Pierwsza instrukcja deklaruje zmienną modyfikowalny arr i wiąże ją z wartością domyślną tablicy całkowitej. Druga instrukcja następnie tworzy nową tablicę z pierwszym elementem (z indeksem 0) ustawionym na 10 i ponownie przypisuje ją do arr.
mutable arr = [0, size = 3]; // arr contains [0, 0, 0]
arr w/= 0 <- 10; // arr contains [10, 0, 0]
Druga instrukcja jest po prostu krótka dla bardziej pełnej składni arr = arr w/ 0 <- 10;.
Wyrażenia kopiowania i aktualizacji umożliwiają wydajne tworzenie nowych tablic na podstawie istniejących. Implementacja wyrażeń kopiowania i aktualizacji pozwala uniknąć kopiowania całej tablicy przez duplikowanie tylko niezbędnych części do osiągnięcia żądanego zachowania i w miarę możliwości wykonuje modyfikację w miejscu. W związku z tym inicjowanie tablicy nie wiąże się z dodatkowym obciążeniem ze względu na niezmienność.
Przestrzeń nazw Std.Arrays udostępnia arsenał wygodnych narzędzi do tworzenia tablicy i manipulowania nimi.
Wyrażenia kopiowania i aktualizacji to wygodny sposób konstruowania nowych tablic na bieżąco; Następujące wyrażenie, na przykład, oblicza tablicę ze wszystkimi elementami ustawionymi na PauliI, z wyjątkiem elementu w indeksie i, który jest ustawiony na PauliZ:
[PauliI, size = n] w/ i <- PauliZ