PROWAREtech

articles » current » dot-net » sort-list-with-delegate-function

.NET: Sort a List of Objects with a Delegate Function

How to use a delegate to sort a C# List Holding Objects Instead of Primitive Types.

Use a delegate for basic sorting of objects in a List.


// NOTE: Declare the class to create objects with
public class User
{
    public string Name { get; set; }
    public int Age { get; set; }

    public User(string name, int age)
    {
        Name = name;
        Age = age;
    }
}
// NOTE: Create the data to sort
List list = new List();
list.Add(new User("Jack", 40));
list.Add(new User("John", 33));
list.Add(new User("Jimmy", 35));
list.Add(new User("Jacquelin", 40));
list.Add(new User("George", 40)); 
list.Add(new User("Denny", 28));
// NOTE: Sort ascending
list.Sort(delegate(User x, User y)
{
    return x.Age.CompareTo(y.Age);
});
// NOTE: Sort descending
list.Sort(delegate(User x, User y)
{
    return y.Age.CompareTo(x.Age);
});
// NOTE: Sort by more than on property
list.Sort(delegate(User x, User y)
{
    // NOTE: Sort by age in ascending order
    int z = x.Age.CompareTo(y.Age);

    // NOTE: When both users have the same age, sort by name in ascending order
    if (z == 0)
        z = x.Name.CompareTo(y.Name);

    return z;
});

Here is an example of sorting a List by the image ratio putting the squarest ones first. This can be useful for finding images for the purposed of machine learning.


// NOTE: A class can also be used in the same manner
record ImageDimension(string path, int width, int height);

// NOTE: Create the data
List imagesDims = new List();
imagesDims.Add(new ImageDimension("image1.jpg", 100, 50));
imagesDims.Add(new ImageDimension("image2.jpg", 100, 100));
imagesDims.Add(new ImageDimension("image3.jpg", 50, 50));
imagesDims.Add(new ImageDimension("image4.jpg", 90, 60));
imagesDims.Add(new ImageDimension("image5.jpg", 720, 1280));
imagesDims.Add(new ImageDimension("image6.jpg", 1024, 768));

// NOTE: Sort putting the squarest images first; the more rectangular ones will be placed in the end
imagesDims.Sort(delegate (ImageDimension x, ImageDimension y)
{
	double xRatio = Math.Min(x.width, x.height) / (double)Math.Max(x.width, x.height);
	double yRatio = Math.Min(y.width, y.height) / (double)Math.Max(y.width, y.height);
	return yRatio.CompareTo(xRatio);
});

PROWAREtech

Hello there! How can I help you today?
Ask any question

PROWAREtech

This site uses cookies. Cookies are simple text files stored on the user's computer. They are used for adding features and security to this site. Read the privacy policy.
ACCEPT REJECT