C# Academy · Oppitunti

Index-tyyppi ja ^-operaattori

Viitatkaa kokoelman alkioihin lopusta alkaen.

Oppitunti 1/413 vaihetta

Index-tyyppi ja ^-operaattori on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C# Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C# Academy-kurssilla on yhteensä 4 oppituntia.

Tutustu Index-tyyppiin

C# tarjoaa erityisen System.Index-tyypin sekvenssin sisäisen sijainnin kuvaamiseen. Toisin kuin tavallinen int, Index voi esittää kokoelman lopusta laskettavan sijainnin, ei ainoastaan alusta laskettavaa sijaintia.

Tämän ansiosta esimerkiksi pyyntö "anna viimeinen alkio" voidaan ilmaista selkeästi ja turvallisesti.

using System;

int[] numbers = { 10, 20, 30, 40, 50 };
Index first = 0;
Console.WriteLine(numbers[first]); // 10

^-operaattori (lopusta laskeminen)

Hattuoperaattori ^ muodostaa Index-arvon, joka laskee sijainnin lopusta. ^1 tarkoittaa viimeistä alkiota, ^2 toiseksi viimeistä ja niin edelleen.

Huomaa, että ^1 on viimeinen kelvollinen indeksi, kun taas ^0 vastaa arvoa Length ja sijaitsee yhden paikan lopun jälkeen.

using System;

int[] numbers = { 10, 20, 30, 40, 50 };
Console.WriteLine(numbers[^1]); // 50 (last)
Console.WriteLine(numbers[^2]); // 40

Index itsenäisenä arvona

Index on todellinen arvo, jonka voit tallentaa muuttujaan, välittää metodeille ja käyttää uudelleen. Näin sijainti voidaan erottaa kokoelmasta.

using System;

int[] data = { 1, 2, 3, 4, 5 };
Index last = ^1;
Index secondLast = ^2;
Console.WriteLine(data[last]);       // 5
Console.WriteLine(data[secondLast]); // 4

IsFromEnd ja Value

Jokaisella Index-arvolla on kaksi ominaisuutta: Value (kokonaislukuna ilmaistu siirtymä) ja IsFromEnd (ilmaisee, luotiinko arvo ^-operaattorilla).

using System;

Index fromStart = 2;
Index fromEnd = ^2;
Console.WriteLine(fromStart.Value + " " + fromStart.IsFromEnd); // 2 False
Console.WriteLine(fromEnd.Value + " " + fromEnd.IsFromEnd);     // 2 True

GetOffset ratkaisee sijainnin

Lopusta laskettava indeksi on merkityksellinen vasta, kun tiedät kokoelman pituuden. Index.GetOffset(length) muuntaa sen konkreettiseksi nollapohjaiseksi siirtymäksi.

using System;

Index fromEnd = ^1;
int length = 5;
int offset = fromEnd.GetOffset(length);
Console.WriteLine(offset); // 4

^0 on yksi sijainti lopun jälkeen

Koska ^0 ratkaistaan arvoksi Length, sen käyttäminen indeksointiin aiheuttaa poikkeuksen. Se on hyödyllinen ainoastaan alueen poissulkevana ylärajana, kuten näet seuraavalla oppitunnilla.

using System;

int[] data = { 1, 2, 3 };
try {
    Console.WriteLine(data[^0]); // out of range!
} catch (IndexOutOfRangeException) {
    Console.WriteLine("^0 is past the end");
}

Index toimii monissa kokoelmissa

Kaikki tyypit, joissa on indeksoija sekä Length- tai Count-ominaisuus ja tarvittava tuki, voivat käyttää Index-tyyppiä. Taulukot, string ja Span<T> toimivat suoraan.

using System;

string word = "Coddy";
Console.WriteLine(word[^1]); // y
Console.WriteLine(word[^5]); // C

Indeksien laskeminen dynaamisesti

Voit muodostaa Index-arvon suorituksen aikana saatavasta kokonaisluvusta käyttämällä ^-operaattoria muuttujan kanssa.

using System;

int[] data = { 5, 10, 15, 20 };
int n = 2;
Index idx = ^n;            // ^ works on variables too
Console.WriteLine(data[idx]); // 15

Index verrattuna tavalliseen int-arvoon

Tavallinen int laskee aina alusta. Index lisää mahdollisuuden laskea lopusta, mutta muuntuu samalla implisiittisesti int-arvosta, joten olemassa oleva koodi toimii edelleen.

using System;

Index a = 1;   // implicit from int
Index b = ^1;  // from end
Console.WriteLine(a.IsFromEnd); // False
Console.WriteLine(b.IsFromEnd); // True

Off-by-one-virheiden välttäminen

Viimeisen alkion hakemiseen käytettiin aiemmin ilmaisua arr[arr.Length - 1]. Ilmaisulla ^1 tarkoitus on selkeä ja virheille altis aritmetiikka jää pois.

using System;

int[] scores = { 88, 92, 79, 95 };
Console.WriteLine(scores[scores.Length - 1]); // old way: 95
Console.WriteLine(scores[^1]);                // new way: 95

Index käytännön koodissa

Tässä on pieni apufunktio, joka palauttaa minkä tahansa taulukon viimeisen alkion käyttämällä ilmaisua ^1 ja pitää kutsukohdan siistinä.

using System;

static T Last<T>(T[] items) => items[^1];

int[] nums = { 3, 6, 9, 12 };
Console.WriteLine(Last(nums)); // 12

Pikatarkistus

Testaa, miten hyvin ymmärrät Index-tyypin ja ^-operaattorin.

Kertaus

Opit, että System.Index edustaa sijaintia, joka voidaan laskea alusta tai ^-operaattorilla lopusta.

  • ^1 tarkoittaa viimeistä alkiota ja ^0 vastaa arvoa Length eli sijaitsee yhden paikan lopun jälkeen.
  • Index-tyypillä on ominaisuudet Value ja IsFromEnd sekä metodi GetOffset(length).
  • Se muuntuu implisiittisesti int-arvosta ja toimii taulukoissa, merkkijonoissa ja span-arvoissa.
Aloita maksutta

Opi C# tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
93
Oppitunnit
346

Usein kysytyt kysymykset

Onko oppitunti ”Index-tyyppi ja ^-operaattori” ilmainen?

Kyllä – oppitunnin ”Index-tyyppi ja ^-operaattori” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C# Academy-kurssin, päivitä CoddyKit PROhon. C# Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Index-tyyppi ja ^-operaattori”?

Viitatkaa kokoelman alkioihin lopusta alkaen. Harjoittelet C# Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C# Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C# Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Index-tyyppi ja ^-operaattori”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C# Academy-oppitunnilla?

Kyllä. Jokainen C# Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Index-tyyppi ja ^-operaattori
  2. Range-tyyppi ja ..-operaattori
  3. Ranget taulukoiden ja merkkijonojen kanssa
  4. Ranget tukevat mukautetut tyypit
← Takaisin: C# Academy