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.
}