The third video in my Exploring MoreLINQ series looks at the
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
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.