Solved

One more sort method needed

Posted on 2009-07-11
2
272 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 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

Salesforce Made Easy to Use

On-screen guidance at the moment of need enables you & your employees to focus on the core, you can now boost your adoption rates swiftly and simply with one easy tool.

Question has a verified solution.

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

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…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
Monitoring a network: why having a policy is the best policy? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the enormous benefits of having a policy-based approach when monitoring medium and large networks. Software utilized in this v…
This is my first video review of Microsoft Bookings, I will be doing a part two with a bit more information, but wanted to get this out to you folks.

724 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