Hoppa till innehåll

Arrayer

↑
Datastrukturer

En array lagrar ett fast antal element av samma typ i en indexerad följd. I C# innehåller int[] heltal och values[0] läser första elementet. Indexering är O(1) eftersom positionen kan beräknas direkt.

Operation Typisk kostnad Varför
Läs eller ersätt via index O(1) Direkt indexering
Sök i osorterad array O(n) Alla värden kan behöva granskas
Sätt in i mitten O(n) Värden behöver flyttas eller kopieras
Gå igenom samtliga värden O(n) Alla element behandlas

Prova själv

Index börjar på 0.

Index ger direkt åtkomst till ett värde utan att behöva leta från början.

  1. Skapa arrayen. new int[4] ger plats för fyra heltal, som börjar med värdet noll.
  2. Spara ett värde. values[2] = 9 ersätter det tredje elementet.
  3. Läs ett värde. values[2] ger nu 9 på konstant tid.
  4. Iterera. En loop går igenom värdena när alla måste behandlas.
C# | Arrays.cs
int[] values = { 4, 8, 12, 16 };
Console.WriteLine(values[2]); // 12
values[1] = 10;
foreach (int value in values)
Console.WriteLine(value);

En array har en fast Length. List<int> kan växa men kan ibland behöva skapa en större underliggande array och kopiera värdena. Att lägga till sist tar vanligen amorterat O(1), men en enskild operation kan kräva mer arbete.

Välj en array när storleken är känd, du vill ha snabb indexering eller ska arbeta med numeriska värden i en algoritm. Välj en lista när längden ofta förändras.

En vanlig array har en bestämd längd. En dynamisk lista som C# List<T> använder normalt en intern array som ibland behöver växa. Det gör upprepade tillägg effektiva i genomsnitt, men att lägga in ett objekt längst fram kräver ofta att många andra värden flyttas.

Om du känner till indexet är direkt åtkomst vanligen O(1). Att leta efter ett okänt värde kan kräva O(n) arbete. I en sorterad array kan du använda binärsökning, men insättning mitt i arrayen kostar fortfarande ofta O(n).

Använd arrayer när storleken är känd och stabil. Använd en dynamisk lista när antalet objekt ändras. Mät allokeringar i prestandakritisk kod och tänk på hur samlingarna använder minnet.