WORDS
Introduktion till Linq: Count(), Any() och All()
I det här inlägget om Linq (Language Integrated Query), en komponent i C# och .NET, så går vi igenom några vanliga metoder för att räkna antal matchningar.
Count()
Om man har en IEnumerable, och vill ta reda på antalet element, antingen totalt eller som uppfyller ett visst kriterium, så kan Count() med fördel användas. I det här inlägget kommer jag använda List<int> i alla exempel, men arrayer och andra IEnumerable funkar lika bra.
IEnumerable<int> myList = new List<int> { 1, 2, 3, 4, 5 };
var totalCount = myList.Count(); // 5
var overThreeCount = myList.Count(x => x > 3); // 2
// Skriv *inte* såhär - raden ovanför gör samma sak kortare.
var overThreeCount = myList.Where(x => x > 3).Count();
Any()
Ibland är man intresserad av att veta om det finns nånting över huvud taget i listan, inte nödvändigtvis hur många. Då kan med fördel Any() användas.
IEnumerable<int> emptyList = new List<int>();
IEnumerable<int> notEmptyList = new List<int> { 1, 2, 3, 4, 5 };
if (emptyList.Any())
{
// Hit kommer vi inte.
}
if (notEmptyList.Any())
{
// Hit kommer vi, för det finns nåt i listan.
}
// Skriv *inte* såhär - raden ovanför gör samma sak kortare och mer effektivt.
if (notEmptyList.Count() > 0)
{
}
Metoden tar också ett lambdauttryck, för att kolla om det finns något element i listan som uppfyller kriterierna.
IEnumerable<int> notEmptyList = new List<int> { 1, 2, 3, 4, 5 };
if (notEmptyList.Any(x => x > 10))
{
// Hit kommer vi inte, för det finns inget element över 10 i listan.
}
// Skriv *inte* såhär - raden ovanför gör samma sak kortare.
if (notEmptyList.Where(x => x > 10).Any())
{
}
All()
Any() kollar om det finns något element som uppfyller kriterierna, medan All() kollar om alla element uppfyller ett visst kriterium.
IEnumerable<int> notEmptyList = new List<int> { 1, 2, 3, 4, 5 };
if (notEmptyList.All(x => x < 10))
{
// Hit kommer vi, för alla element i listan uppfyller kriteriet.
}