Click here to Skip to main content
Click here to Skip to main content
Add your own
alternative version

Extension Methods Exemplified: Sorting Index-based Generic Lists

, 23 Aug 2008 CPOL
This article shows how extension methods can be used, e.g., for sorting index-based generic lists.
Sorting_Extensions.zip
Sorting Extensions
Properties
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)

Share

About the Author

Björn Friedrich
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
Follow on   Google+

| Advertise | Privacy | Mobile
Web04 | 2.8.141022.2 | Last Updated 23 Aug 2008
Article Copyright 2008 by Björn Friedrich
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid