Generics C#

Sort a List Range with IComparer

This C# program demonstrates how to sort a range of elements in a list range with an IComparer.

Program.cs

using System;
using System.Collections.Generic;


namespace XoaX {

    public class CChristianMartyr {
        public string msName;
        public int miYearOfMartyrdom;
        // Constructor
        public CChristianMartyr(string sName, int iYearOfMartyrdom) {
            msName = sName;
            miYearOfMartyrdom = iYearOfMartyrdom;
        }
    }

    public class CYearComparison : IComparer<CChristianMartyr> {
        public int Compare(CChristianMartyr qMartyr1, CChristianMartyr qMartyr2) {
            if (qMartyr1 == null) {
                if (qMartyr2 == null) {
                    // They're both null. So, they're equal. 
                    return 0;
                } else {
                    // The first is null. So, it is less.
                    return -1;
                }
            } else {
                if (qMartyr2 == null) {
                    // If the second one is null, the first is greater.
                    return 1;
                } else if (qMartyr1.miYearOfMartyrdom == qMartyr2.miYearOfMartyrdom) {
                    return 0;
                } else {
                    return ((qMartyr1.miYearOfMartyrdom > qMartyr2.miYearOfMartyrdom) ? 1 : -1);
                }
            }
        }
    }

    class Program {
        static void Main(string[] args) {
            List<CChristianMartyr> qMartyrs = new List<CChristianMartyr>();
            qMartyrs.Add(new CChristianMartyr("Saint Julian", 250));
            qMartyrs.Add(new CChristianMartyr("Saint Lorenzo Ruiz", 1637));
            qMartyrs.Add(new CChristianMartyr("Saint Apollonius", 305));
            qMartyrs.Add(new CChristianMartyr("Saint Justin Martyr", 165));
            qMartyrs.Add(new CChristianMartyr("Saint Laura", 864));
            qMartyrs.Add(new CChristianMartyr("Saint John Boste", 1594));
            qMartyrs.Add(new CChristianMartyr("Saint Flavius", 300));

            Console.WriteLine("Unsorted:");
            Console.WriteLine("---------");
            foreach (CChristianMartyr qMartyr in qMartyrs) {
                Console.WriteLine(qMartyr.msName + " was martyred in " +
                    qMartyr.miYearOfMartyrdom + " AD");
            }
            Console.WriteLine("");

            // Sort the list
            int iStart = 1;
            int iCount = 4;
            qMartyrs.Sort(iStart, iCount, new CYearComparison());

            Console.WriteLine("Sorted index " + iStart + " through " + (iStart + iCount - 1) +
                " by martyrdom date:");
            Console.WriteLine("-------------------------------------------");
            foreach (CChristianMartyr qMartyr in qMartyrs) {
                Console.WriteLine(qMartyr.msName + " was martyred in " +
                    qMartyr.miYearOfMartyrdom + " AD");
            }
            Console.WriteLine("");
        }
    }

}
 

Output

Unsorted:
---------
Saint Julian was martyred in 250 AD
Saint Lorenzo Ruiz was martyred in 1637 AD
Saint Apollonius was martyred in 305 AD
Saint Justin Martyr was martyred in 165 AD
Saint Laura was martyred in 864 AD
Saint John Boste was martyred in 1594 AD
Saint Flavius was martyred in 300 AD

Sorted index 1 through 4 by martyrdom date:
-------------------------------------------
Saint Julian was martyred in 250 AD
Saint Justin Martyr was martyred in 165 AD
Saint Apollonius was martyred in 305 AD
Saint Laura was martyred in 864 AD
Saint Lorenzo Ruiz was martyred in 1637 AD
Saint John Boste was martyred in 1594 AD
Saint Flavius was martyred in 300 AD

Press any key to continue . . .
 
 

© 2007–2024 XoaX.net LLC. All rights reserved.