Click here to Skip to main content
15,894,017 members
Articles / Programming Languages / C#

Extension Methods Exemplified: Sorting Index-based Generic Lists

Rate me:
Please Sign up or sign in to vote.
5.00/5 (9 votes)
23 Aug 2008CPOL2 min read 36K   162   19  
This article shows how extension methods can be used, e.g., for sorting index-based generic lists.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace Extensions
{
    /// <summary>
    /// Provides extension methods for sorting index-based generic lists.
    /// </summary>
    public static class SortingExtensionProvider
    {

        /// <summary>
        /// Applies the Bubble Sort algorithm to the list.
        /// </summary>
        /// <typeparam name="T">Type of the list elements which implements <c>IComparable</c>.</typeparam>
        /// <param name="list">An index-based generic list.</param>
        public static void Sort<T>(this IList<T> list) where T : IComparable
        {
            Sort(list, 0, list.Count - 1);
        }


        /// <summary>
        /// Applies the Bubble Sort algorithm to a range of elements of the list.
        /// </summary>
        /// <typeparam name="T">Type of the list elements which implements <c>IComparable</c>.</typeparam>
        /// <param name="list">An index-based generic list.</param>
        /// <param name="startIndex">Index of the first element of the range.</param>
        /// <param name="endIndex">Index of the last element of the range.</param>
        public static void Sort<T>(this IList<T> list, int startIndex, int endIndex) where T : IComparable
        {
            //Bubble Sort
            for (int i = startIndex; i < endIndex; i++)
                for (int j = endIndex; j > i; j--)
                    if (list[j].IsLesserThan(list[j - 1]))
                        list.Exchange(j, j - 1);
        }


        /// <summary>
        /// Exchanges two elements of the list.
        /// </summary>
        /// <typeparam name="T">Type of the list elements which implements <c>IComparable</c>.</typeparam>
        /// <param name="list">An index-based generic list.</param>
        /// <param name="index1">Index of the first element to be exchanged.</param>
        /// <param name="index2">Index of the second element to be exchanged.</param>
        private static void Exchange<T>(this IList<T> list, int index1, int index2)
        {
            T tmp = list[index1];
            list[index1] = list[index2];
            list[index2] = tmp;
        }


        /// <summary>
        /// Returns whether the value of an <c>IComparable</c> is lesser than the value of another.
        /// </summary>
        /// <param name="value">An object of a type that implements <c>IComparable</c>.</param>
        /// <param name="item">An object of a type that implements <c>IComparable</c>.</param>
        /// <returns></returns>
        private static bool IsLesserThan(this IComparable value, IComparable item)
        {
            return value.CompareTo(item) < 0;
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Other Leibniz Institute for Neurobiology Magdeburg
Germany Germany
- 2002 - 2004: vocational training (IT Specialist in Software Development) at the Deutsche Telekom AG with in-firm training at the T-Systems International GmbH (Berlin, Germany)

- 2003: three-month stay-abroad at the InterConsult Bulgaria Ltd. (Sofia, Bulgaria)

- 2004 - 2009: undergraduate studies in IT-Systems Engineering at the Hasso Plattner Institute for Software Systems Engineering (University of Potsdam, Germany)

- 2009: bachelor project at the Deutsche Post DHL (Berlin, Germany)

- 2009 - 2012: graduate studies in Integrative Neuroscience (Magdeburg, Germany)

- 2012 - present: research fellow at the Leibniz Institute for Neurobiology (Magdeburg, Germany)

- specialized in Microsoft .NET technologies
- currently develops scientific software with MatLab

Comments and Discussions