Delen via


Toegang tot items

Q# ondersteunt itemtoegang voor matrixitems en voor struct typen. In beide gevallen is de toegang alleen-lezen; de waarde kan niet worden gewijzigd zonder een nieuw exemplaar te maken met behulp van een expressie voor kopiëren en bijwerken.

Toegang tot matrixitems en matrixlicing

Op basis van een matrixexpressie en een expressie van het type Int of Rangekan een nieuwe expressie worden gevormd met behulp van de operator voor toegang tot matrixitems die bestaat uit [ en ].

Als de expressie tussen de haken van het type Intis, bevat de nieuwe expressie het matrixitem in die index. Als arr bijvoorbeeld van het type Double[] is en vijf of meer items bevat, is arr[4] een expressie van het type Double.

Als de expressie tussen de haken van het type Rangeis, bevat de nieuwe expressie een matrix van alle items die zijn geïndexeerd door de opgegeven Range. Als de Range leeg is, is de resulterende matrix leeg. Bijvoorbeeld

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]

In de laatste regel van het voorbeeld zijn de begin- en eindwaarde van het bereik weggelaten voor het gemak. Zie Contextuele expressiesvoor meer informatie.

Als de matrixexpressie geen eenvoudige id is, moet deze tussen haakjes worden geplaatst om een item of segment te extraheren. Als arr1 en arr2 bijvoorbeeld beide matrices van gehele getallen zijn, wordt een item uit de samenvoeging uitgedrukt als (arr1 + arr2)[13]. Zie prioriteit en associativiteitvoor meer informatie.

Alle matrices in Q# zijn gebaseerd op nul, dat wil gezegd, het eerste element van een matrix arr altijd arr[0]is. Er wordt tijdens runtime een uitzondering gegenereerd als de index of een van de indexen die worden gebruikt voor segmentering buiten de grenzen van de matrix valt, bijvoorbeeld als deze kleiner is dan nul of groter of gelijk is aan de lengte van de matrix.

Itemtoegang voor structtypen

De ingesloten items in een struct zijn op twee manieren toegankelijk:

  • Met behulp van een punt (.)
  • Gebruik de operator unwrap (!) door de deconstructie te gebruiken.

Bijvoorbeeld, op basis van de struct 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;

De toegang via deconstructie maakt gebruik van de uitpakoperator (!). De operator uitpakken retourneert een tuple van alle ingesloten items, waarbij de vorm van de tuple overeenkomt met de tuple die is gedefinieerd in de declaratie en één item-tuple gelijk is aan het item zelf (zie deze sectie).

De operator ! heeft een lagere prioriteit dan beide operatoren voor itemtoegang, maar hogere prioriteit dan een andere operator. Zie prioriteits- en associativiteits-voor een volledige lijst met prioriteitsvolgordes.

Zie Declaraties en toewijzingen van variabelenvoor meer informatie over de destructiesyntaxis.