Solved

One more sort method needed

Posted on 2009-07-11
2
233 Views
Last Modified: 2012-05-07
I have a compareTo method that sorts on lastname and then firstname

What if I want anohter way to be able to sort? I want them both but be able to choose.....where and how would that look like?. Right now this is my sort method but I would like to add one that does firstname first and then second name.

A generic collection in your application to be ordered in two different ways one
use of IComparer <T>.   (The Icomapare<T> is done)
#region IComparable<Contact> Members
 

       

        public int CompareTo(Contact other)

        {

            int result = this.LastName.CompareTo(other.LastName);

            if (result == 0)

            {

                result = this.FirstName.CompareTo(other.FirstName);

            }

            return result;

        }
 
 

        #endregion

Open in new window

0
Comment
Question by:Mickeys
2 Comments
 
LVL 85

Accepted Solution

by:
Mike Tomlinson earned 250 total points
ID: 24833550
Here's one way to do it...
namespace WindowsFormsApplication1

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }
 

        private void button1_Click(object sender, EventArgs e)

        {

            List<Contact> Contacts = new List<Contact>();

            

            Contact ctA = new Contact();

            ctA.FirstName = "Idle";

            ctA.LastName = "Mind";

            Contacts.Add(ctA);
 

            Contact ctB = new Contact();

            ctB.FirstName = "Indiana";

            ctB.LastName = "Jones";

            Contacts.Add(ctB);
 

            Contact ctC = new Contact();

            ctC.FirstName = "Alpha";

            ctC.LastName = "Zebra";

            Contacts.Add(ctC);
 

            Contact.SortOrder = Contact.ContactSortOrder.FirstNameThenLastName;

            Console.WriteLine(Contact.SortOrder.ToString());

            Contacts.Sort();

            foreach (Contact ct in Contacts)

                Console.WriteLine(ct.ToString());
 

            Console.WriteLine();

            Contact.SortOrder = Contact.ContactSortOrder.LastNameThenFirstName;

            Console.WriteLine(Contact.SortOrder.ToString());

            Contacts.Sort();

            foreach (Contact ct in Contacts)

                Console.WriteLine(ct.ToString());

        }
 

    }
 

    public class Contact : IComparable<Contact>

    {
 

        public enum ContactSortOrder { LastNameThenFirstName, FirstNameThenLastName };

        public static ContactSortOrder SortOrder = ContactSortOrder.LastNameThenFirstName;
 

        public string LastName;

        public string FirstName;
 

        public int CompareTo(Contact other)

        {

            if (Contact.SortOrder == ContactSortOrder.LastNameThenFirstName)

            {

                int result = this.LastName.CompareTo(other.LastName);

                if (result == 0)

                {

                    result = this.FirstName.CompareTo(other.FirstName);

                }

                return result;

            }

            else

            {

                int result = this.FirstName.CompareTo(other.FirstName);

                if (result == 0)

                {

                    result = this.LastName.CompareTo(other.LastName);

                }

                return result;

            }

        }
 

        public override string ToString()

        {

            return this.FirstName + " " + this.LastName;

        }

    }

Open in new window

0
 
LVL 29

Assisted Solution

by:Göran Andersson
Göran Andersson earned 250 total points
ID: 24833610
To get different sortings, you can add a comparer to the Contact class. Then you can use that in the Sort method:

contact.Sort(new Contact.Comparer(Contact.SortOrder.FirstNameLastName));

public class Contact {
 

   public enum SortOrder { FirstNameLastName, LastNameFirstName }
 

   public class Comparer : IComparer<Contact> {
 

      private SortOrder _sortOrder;
 

      public Comparer(SortOrder sortOrder) {

         _sortOrder = sortOrder;

      }
 

      public int Compare(Contact x, Contact y) {

         int result;

         switch (_sortOrder) {

            case SortOrder.FirstNameLastName:

               result = x.FirstName.CompareTo(y.FirstName);

               if (result == 0) {

                  result = x.LastName.CompareTo(y.LastName);

               }

               break;

            case SortOrder.LastNameFirstName:

               result = x.LastName.CompareTo(y.LastName);

               if (result == 0) {

                  result = x.FirstName.CompareTo(y.FirstName);

               }

               break;

            }

         return result;

      }
 

   }
 

   ...
 

}

Open in new window

0

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Introduction This article series is supposed to shed some light on the use of IDisposable and objects that inherit from it. In essence, a more apt title for this article would be: using (IDisposable) {}. I’m just not sure how many people would ge…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
This tutorial demonstrates a quick way of adding group price to multiple Magento products.
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now