Linq-metoder

Linq-biblioteket bygger ut existerande samlings-datatyper (som List och även arrayer) med nya metoder.

Ofta tar metoderna emot delegater som parametrar, och ofta används då istället Lambda-uttryck.

Flera av metoderna returnerar en generisk samling av den Linq-specifika datatypen Enumerable, som i sin tur kan omvandlas till en lista genom att man anropar ToList().

Hämta flera

Where()

Tar emot ett kriterium i form av en delegat eller ett Lambda-uttryck, och returnerar en Enumerator som innehåller alla föremål som matchar kriteriet.

List<GameObject> objects = new();
objects.Add(new Enemy());

List<GameObject> lowHealth = 
  objects.Where(g => g.hp < 10)
  .ToList();

OfType<>()

Returnerar en Enumerable som innehåller alla föremål som är av en specifik datatyp. Väldigt användbart ifall man använt polymorfism för att lagra instanser av subklasser i en samling där typvariabeln är basklassen.

List<GameObject> objects = new();
objects.Add(new Enemy());

List<Enemy> enemies = objects.OfType<Enemy>().ToList();

Hämta enstaka

First() / Last()

Returnerar det första/sista värdet i samlingen. Om samlingen är tom så skapas ett runtime-fel.

List<int> myList = new List<int>() {4,3,2,1};

int i = myList.First(); // i blir 4

FirstOrDefault() / LastOrDefault()

Fungerar som First/Last, utom att metoden returnerar null, eller ett default-värde (t.ex. 0 för ints) ifall samlingen är tom.

List<int> myList = new List<int>();
int i = myList.FirstOrDefault(); // i blir 0

OrderBy()

Tar emot en delegate eller ett Lambda-uttryck som parameter, och använder den för att sortera samlingen. Delegaten tar emot ett föremål, och returnerar det värde som ska avgöra föremålens sortering.

OrderBy returnerar en Enumerable som innehåller samma föremål som originalsamlingen, sorterade i rätt ordning.

List<Character> sortedCharacters = 
  characters.OrderBy(c => c.name)
  .ToList();

Select

Tar emot en delegate eller ett Lambda-uttryck som parameter, och bygger en ny samling med det som returneras från delegaten/uttrycket för varje föremål i originalsamlingen.

Anges bara en parameter i delegaten/uttrycket så ska denna vara samma datatyp som originalsamlingens typparameter.

List<int> intList = new() { 1, 2, 3, 4, 5 };

List<int> higherIntList = 
  intList.Select(x => x + 6)
  .ToList(); // 7,8,9,10,11

Skapa en lista med instanser av Character, där varje Characters konstruktor tar emot en string i form av ett namn (n):

string[] names = {"Björn", "Mira", "Mohammad", "Kim"};

List<Character> characters = 
  names.Select(n => new Character(n))
  .ToList();

Skapa en lista med instanser av Character, där varje Characters konstruktor tar emot en string i form av ett namn (n) samt en siffra som är namnets index plus 1:

string[] names = {"Björn", "Mira", "Mohammad", "Kim"};

List<Character> characters = 
  names.Select((n, i) => new Character(n, i+1))
  .ToList();

Boolska

All()

Tar emot ett kriterium i form av en delegat eller ett Lambda-uttryck, och returnerar true ifall samtliga föremål i samlingen stämmer in på kriteriet.

List<int> intList = new() { 1, 2, 3, 4, 5 };

bool allHigh = intList.All(n => n > 3); // false, för alla är inte > 3

Any()

Tar emot ett kriterium i form av en delegat eller ett Lambda-uttryck, och returnerar true ifall minst ett föremål i samlingen stämmer in på kriteriet.

List<int> intList = new() { 1, 2, 3, 4, 5 };

bool hasHigh = intList.Any(n => n > 3); // true, för minst en är > 3

Matematiska

Dessa fungerar bara för samlingar med tal – ints, doubles, floats och så vidare.

Max()

Returnerar det högsta värdet i samlingen.

List<int> intList = new() { 2, 67, 23, 100, 1 };

int highest = intList.Max(); // 100

Min()

Returnerar det lägsta värdet i samlingen.

List<int> intList = new() { 2, 67, 23, 100, 1 };

int lowest = intList.Min(); // 1

Average()

Returnerar medelvärdet av alla värden i samlingen, som en double.

List<int> intList = new() { 2, 67, 23, 100, 1 };

double avg = intList.Average(); // 38.6

Last updated