All pastes #261745 Raw Edit

Unnamed

public text v1 · immutable
#261745 ·published 2006-11-29 20:51 UTC
rendered paste body
    class OrdinallySortableList : List<String>
    {
        /// <summary>
        /// Helper class for sorting the strings ordinally
        /// </summary>
        private class OrdinalComparer : IComparer<string>
        {
            
            #region IComparer<string> Members
            int IComparer<string>.Compare(string x, string y)
            {
                Regex numberRegEx = new Regex(@"([a-zA-Z])(\d+)_(\d+)", RegexOptions.Compiled);

                Match xFileName = numberRegEx.Match(x);
                Match yFileName = numberRegEx.Match(y);

                string xLeadingChar = xFileName.Groups[1].Value;
                string yLeadingChar = yFileName.Groups[1].Value;
                
                int leadingCharCompareResult = String.Compare(xLeadingChar, yLeadingChar);
                if (leadingCharCompareResult != 0)
                    return leadingCharCompareResult;
                else
                {
                    int xNumber = int.Parse(xFileName.Groups[2].Value + xFileName.Groups[3].Value);
                    int yNumber = int.Parse(yFileName.Groups[2].Value + yFileName.Groups[3].Value);
                    return (xNumber - yNumber);
                }
            }
            #endregion
        }

        public void SortOrdinal()
        {
            base.Sort(new OrdinalComparer());
        }
    }