Index-tyyppi ja ^-operaattori
Viitatkaa kokoelman alkioihin lopusta alkaen.
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]); // 40Index 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]); // 4IsFromEnd 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 TrueGetOffset 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]); // CIndeksien 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]); // 15Index 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); // TrueOff-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: 95Index 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)); // 12Pikatarkistus
Testaa, miten hyvin ymmärrät Index-tyypin ja ^-operaattorin.
Kertaus
Opit, että System.Index edustaa sijaintia, joka voidaan laskea alusta tai ^-operaattorilla lopusta.
^1tarkoittaa viimeistä alkiota ja^0vastaa arvoaLengtheli sijaitsee yhden paikan lopun jälkeen.Index-tyypillä on ominaisuudetValuejaIsFromEndsekä metodiGetOffset(length).- Se muuntuu implisiittisesti
int-arvosta ja toimii taulukoissa, merkkijonoissa ja span-arvoissa.
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
- Index-tyyppi ja ^-operaattori
- Range-tyyppi ja ..-operaattori
- Ranget taulukoiden ja merkkijonojen kanssa
- Ranget tukevat mukautetut tyypit