Exploring MoreLINQ Part 3 - MinBy and MaxBy
The third video in my Exploring MoreLINQ series looks at the MinBy
and MaxBy
methods, which allow you to find the items in a collection that are the "maximum" or "minimum" according a criteria you specify. This is really useful method when the built-in Max
or Min
methods in LINQ aren't quite what you need.
For example, say we have an IEnumerable<Book>
and we wanted to find which book has the most pages, LINQ's Max
method would tell us what the maximum PageCount
was, but wouldn't tell us which book had that number of pages. MoreLINQ's MaxBy
method gives us what we want - it finds the book(s) that have the maximum number of pages.
Obviously there could be multiple books with the maximum numbers which is why it returns an IEnumerable<T>
so you may want to follow it up with a call to First
like this:
IEnumerable<Book> books = GetBooks();
var mostPages = books.Max(b => b.PageCount); // just finds the highest page count
var longestBook = books.MaxBy(b => b.PageCount).First(); // finds the first book with the highest page count
For another real-world example of where MaxBy
is useful - check out my solution to one of the Advent of Code problems where I have to find the seating plan with maximum happiness.
You can find all videos in this series here.