Home > Enterprise >  How to get biggest element in HashSet of object by field?
How to get biggest element in HashSet of object by field?

Time:09-17

Suppose I have the class

public class Point {
    public float x, y, z;
}

And I've created this hashset:

HashSet<Point> H;

How can I get the element of H with the biggest z? It doesn't need necessarily to use Linq.

CodePudding user response:

You can use Aggregate to mimic MaxBy functionality (note that you need to check if collection has any elements first):

var maxByZ = H.Aggregate((point, point1) => point.z > point1.z ? point : point1);

When .NET 6 is out it should have built in MaxBy.

CodePudding user response:

You could do this:

int maxZ = H.Max(point => point.Z);
var maxPointByZ = H.Where(point => point.Z == maxZ).FirstOrDefault();

This works by first retrieving the largest value of Z in the set:

H.Max(point2 => point2.Z) //Returns the largest value of Z in the set

And then by doing a simple where statement to get the record where Z is equal to that value. If there are multiple values, it will get the first one, so you may want to sort the enumerable in advance.

  • Related