Sdílet prostřednictvím


Přístup k položce

Q# podporuje přístup k položkám polí a pro typy struct. V obou případech je přístup jen pro čtení; hodnotu nelze změnit bez vytvoření nové instance pomocí výrazu copy-and-update.

Přístup k položce pole a řezy polí

Při zadání maticového výrazu a výrazu typu Int nebo Rangelze nový výraz vytvořit pomocí operátoru přístupu k položce pole, který se skládá z [ a ].

Pokud je výraz uvnitř závorek typu Int, nový výraz obsahuje položku pole v tomto indexu. Pokud je například arr typu Double[] a obsahuje pět nebo více položek, pak arr[4] je výraz typu Double.

Pokud je výraz uvnitř závorek typu Range, nový výraz obsahuje pole všech položek indexovaných zadaným Range. Pokud je Range prázdný, je výsledné pole prázdné. Příklad:

let arr = [10, 11, 36, 49];
let ten = arr[0]; // contains the value 10
let odds = arr[1..2..4]; // contains the value [11, 49]
let reverse = arr[...-1...]; // contains the value [49, 36, 11, 10]

Na posledním řádku příkladu byla pro usnadnění vynechána počáteční a koncová hodnota rozsahu. Další informace naleznete v tématu Kontextové výrazy.

Pokud výraz pole není jednoduchý identifikátor, musí být uzavřen v závorkách, aby bylo možné extrahovat položku nebo řez. Pokud jsou například arr1 a arr2 obě pole celých čísel, bude položka z zřetězení vyjádřena jako (arr1 + arr2)[13]. Další informace najdete v tématu Priorita a asociativita.

Všechna pole v Q# jsou založená na nule, tj. první prvek pole arr je vždy arr[0]. Výjimka se vyvolá za běhu, pokud je index nebo jeden z indexů použitých pro řezy mimo hranice pole, například pokud je menší než nula nebo větší nebo rovna délce pole.

Přístup k položce pro typy struktur

K obsaženým položkám v struct lze přistupovat dvěma způsoby:

  • Použití tečky (.)
  • Dekonstrukce pomocí operátoru unwrap (!).

Například vzhledem ke struktuře Complex

struct Complex {
    Real : Double,
    Imaginary : Double,
}

// create an instance of type Complex
let complex = Complex(1., 0.);

// item access via deconstruction
let (re, _) = complex!;

// item access via name reference
let im = complex.Imaginary;

Přístup prostřednictvím dekonstrukce využívá operátor unwrap (!). Operátor unwrap vrátí řazenou kolekci členů všech obsažených položek, kde tvar řazené kolekce členů odpovídá řazené kolekci členů definované v deklaraci a jedna položka řazená kolekce členů je ekvivalentní samotné položce (viz tento oddíl).

Operátor ! má nižší prioritu než oba operátory přístupu k položkě, ale vyšší prioritu než jakýkoli jiný operátor. Úplný seznam priorit najdete v tématu Priorita a asociativita.

Další informace o syntaxi dekonstrukce naleznete v tématu Deklarace proměnných a opětovné přiřazení.