ArrayList.sort()排序字符串,大写字母放在小写的后面如这个sort后的例子  brown dog fox jumps lazy over quick the The THe THE
现在有个应用需要将大写字母放在前面,即排序后的结果是THE THe The brown dog fox jumps lazy over quick the请提供思路,谢谢

解决方案 »

  1.   

    用首字母的ASC码排序应该就可以了
      

  2.   

    arraylist提供了 
    public virtual void Sort(IComparer)
    这人方法,你只需要根据实现IComparer的排序类就可以,
    实现的方法可以sniperfox(飞翔的心) 所说的.
      

  3.   

    你自己实现ICompare接口,在里面按首字母大小写分段排序。
      

  4.   

    同意楼上,不需要改写。自己实现ICompare接口就行了,就像C++中的Function Object一样
      

  5.   

    ArrayList myAL = new ArrayList();
    myAL.Add("the");
    myAL.Add("The");
    myAL.Add("THe");
    myAL.Add("THE");myCustomComparer myComparer = new myCustomComparer();
    myAL.Sort(myComparer);public class myCustomComparer : IComparer
    {
        int IComparer.Compare( Object x, Object y )  
        {
            //这里需要重写!!!
            //return( (new CaseInsensitiveComparer()).Compare( y, x ) );
        }                
    }
      

  6.   

    该怎么重写呢?ASC码怎么比较呢?
      

  7.   

    或者哪位大大有comparer的资料,让我看看也行啊我不知道如何写那玩意儿谢谢
      

  8.   

    using System;
    using System.Collections;namespace ArrayResizeExample
    { public class Fruit : IComparable
    {
    public enum SortMetric
    {
    Name,
    Mass,
    Color
    };

    public virtual string Name
    {
    get
    {
    return( "Fruit" );
    }
    } public virtual float Mass
    {
    get
    {
    return( float.NaN );
    }
    } public virtual string Color
    {
    get
    {
    return( null );
    }
    }
    #region IComparable Members public int CompareTo(object obj)
    {
    Fruit fruit = (Fruit) obj;
    return( this.Name.CompareTo( fruit.Name ));
    } #endregion public class SortByMassClass : IComparer
    {
    #region IComparer Members public int Compare(object x, object y)
    {
    Fruit fruitx = (Fruit) x;
    Fruit fruity = (Fruit) y; return( ((IComparable) fruitx.Mass).CompareTo( fruity.Mass ));
    } #endregion } public class SortByColorClass : IComparer
    {
    #region IComparer Members public int Compare(object x, object y)
    {
    Fruit fruitx = (Fruit) x;
    Fruit fruity = (Fruit) y; return( String.Compare( fruitx.Color, fruity.Color ));
    } #endregion } } public class Apple : Fruit
    {
    public override string Name
    {
    get
    {
    return( "Apple" );
    }
    } public override float Mass
    {
    get
    {
    return( 119.0f );
    }
    } public override string Color
    {
    get
    {
    return( "Red" );
    }
    }
    } public class Banana : Fruit
    {
    public override string Name
    {
    get
    {
    return( "Banana" );
    }
    } public override float Mass
    {
    get
    {
    return( 92.0f );
    }
    } public override string Color
    {
    get
    {
    return( "Yellow" );
    }
    }
    } public class Cantaloupe : Fruit
    {
    public override string Name
    {
    get
    {
    return( "Cantaloupe" );
    }
    } public override float Mass
    {
    get
    {
    return( 380.0f );
    }
    } public override string Color
    {
    get
    {
    return( "Brown" );
    }
    }
    } public class FruitBasket : IEnumerable
    {
    Fruit[] basket = new Fruit[1];
    int count = 0;
    int revision = 0; internal Fruit this[int index]
    {
    get
    {
    CheckIndex( index );
    return( basket[index] );
    }
    set
    {
    CheckIndex( index );
    basket[index] = value;
    revision++;
    }
    } internal int Count
    {
    get
    {
    return( count );
    }
    } internal int Revision
    {
    get
    {
    return( revision );
    }
    } internal static IComparer SortByMass
    {
    get
    {
    return( (IComparer) new Fruit.SortByMassClass());
    }
    } internal static IComparer SortByColor
    {
    get
    {
    return( (IComparer) new Fruit.SortByColorClass());
    }
    } public void Add( Fruit fruit )
    {
    if( count >= basket.Length )
    {
    basket = (Fruit[]) Resize( basket, basket.Length * 2 );
    }
    basket[count++] = fruit;
    } public static Array Resize( Array array, int newSize )
    {
    Type type = array.GetType().GetElementType();
    Array newArray = Array.CreateInstance( type, newSize );
    Array.Copy( array, 0, newArray, 0, Math.Min( array.Length, newSize ));
    return newArray;
    } internal void CheckIndex( int index )
    {
    if( index >= count )
    throw new ArgumentOutOfRangeException( @"Index value out of range" );
    } public void Sort()
    {
    Array.Sort( basket, 0, count );
    } public void Sort( Fruit.SortMetric sortMetric )
    {
    switch( sortMetric )
    {
    case Fruit.SortMetric.Name:
    Array.Sort( basket, 0, count );
    break;
    case Fruit.SortMetric.Mass:
    Array.Sort( basket, 0, count, SortByMass );
    break;
    case Fruit.SortMetric.Color:
    Array.Sort( basket, 0, count, SortByColor );
    break;
    }
    } #region IEnumerable Members public IEnumerator GetEnumerator()
    {
    return( new FruitBasketEnumerator( this ));
    } #endregion
    } public class FruitBasketEnumerator : IEnumerator
    {
    FruitBasket fruitBasket;
    int index;
    int revision; #region IEnumerator Members public void Reset()
    {
    index = -1;
    revision = fruitBasket.Revision;
    } public object Current
    {
    get
    {
    if( revision != fruitBasket.Revision )
    throw new InvalidOperationException( @"Collection modified while enumerating." );
    return( fruitBasket[index] );
    }
    } public bool MoveNext()
    { if( ++index >= fruitBasket.Count )
    return( false );
    else
    return( true );
    }

    #endregion
    internal FruitBasketEnumerator( FruitBasket fruitBasket )
    {
    this.fruitBasket = fruitBasket;
    Reset();
    } }
    class ArrayResizeExample
    {
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
    FruitBasket fruitBasket = new FruitBasket(); Console.WriteLine( "Adding a Banana" );
    fruitBasket.Add( new Banana() );
    Console.WriteLine( "Adding an Apple" );
    fruitBasket.Add( new Apple() );
    Console.WriteLine( "Adding a Cantaloupe" );
    fruitBasket.Add( new Cantaloupe() ); Console.WriteLine( "" ); Console.WriteLine( "Sorting by Name" );
    fruitBasket.Sort(); Console.WriteLine( "" );

    Console.WriteLine( "The basket is holding:" );
    foreach( Fruit fruit in fruitBasket )
    {
    Console.WriteLine( "  a(n) " + fruit.Name );
    } Console.WriteLine( "" ); Console.WriteLine( "Sorting by Mass" );
    fruitBasket.Sort( Fruit.SortMetric.Mass ); Console.WriteLine( "" );

    Console.WriteLine( "The basket is holding:" );
    foreach( Fruit fruit in fruitBasket )
    {
    Console.WriteLine( "  a(n) " + fruit.Name + " w/ Mass = " + fruit.Mass );
    } Console.WriteLine( "" ); Console.WriteLine( "Sorting by Color" );
    fruitBasket.Sort( Fruit.SortMetric.Color ); Console.WriteLine( "" );

    Console.WriteLine( "The basket is holding:" );
    foreach( Fruit fruit in fruitBasket )
    {
    Console.WriteLine( "  a(n) " + fruit.Name + " w/ Color = " + fruit.Color );
    }
    }
    }
    }
      

  9.   

    重写int CompareTo(object obj) 方法。
    //参考的例子,按名称进行排序。
    using System;namespace Zhengzuo
    {
    public class FileItem :IComparable
    {
    private string fileName; public FileItem(string fileName)
    {
    this.fileName = fileName;
    }
    public string FileName
    {
    get {return this.fileName;}
    }
    public int CompareTo(object obj) 
    { //if (obj == null) 
    // return 1; string compareFileName = ((FileItem)obj).FileName;
                
    //if (this.FileName == compareFileName) 
    // return 0;
    //if (this.FileName < compareFileName) 
    // return -1;
    //if (this.FileName > compareFileName) 
    // return 1;
    //return 0;
    return this.FileName.CompareTo(compareFileName);
    }
    }
    }
    使用
    ArrayList al = new ArrayList();
    foreach(string fileName in Directory.GetFiles("c;\\"))
    {
    al.Add(new FileItem(fileName));
    }
    al.Sort();