?
Solved

One more sort method needed

Posted on 2009-07-11
2
Medium Priority
?
284 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
2 Comments
 
LVL 86

Accepted Solution

by:
Mike Tomlinson earned 1000 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 1000 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

Important Lessons on Recovering from Petya

In their most recent webinar, Skyport Systems explores ways to isolate and protect critical databases to keep the core of your company safe from harm.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article introduced a TextBox that supports transparent background.   Introduction TextBox is the most widely used control component in GUI design. Most GUI controls do not support transparent background and more or less do not have the…
We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
In response to a need for security and privacy, and to continue fostering an environment members can turn to for support, solutions, and education, Experts Exchange has created anonymous question capabilities. This new feature is available to our Pr…
In a question here at Experts Exchange (https://www.experts-exchange.com/questions/29062564/Adobe-acrobat-reader-DC.html), a member asked how to create a signature in Adobe Acrobat Reader DC (the free Reader product, not the paid, full Acrobat produ…
Suggested Courses

650 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