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请提供思路,谢谢
现在有个应用需要将大写字母放在前面,即排序后的结果是THE THe The brown dog fox jumps lazy over quick the请提供思路,谢谢
解决方案 »
- 怎样让DAL层的三个方法可以单独调用,也可以放到一个事务中一起调用?
- 同一个ocx控件,为什么在.net2.0和.net4.0下调用时行为不一样?
- 想不出来了,提问。。。
- Oracle 开发资料及例子CHM
- 国外人写的JustinIO.cs源程序的问题,编译通过不了,急,了解的给指点一下,不了解的顶个帖,谢了!
- 怎样才能获取一个PHP页面?
- 如何连接DBF表
- 为什么反序列化的结果都是NULL???
- 在win2000中,C#写支持事务的COM+组件访问Oracle不行,如何解决
- C#如何实现象Java Applet一样的功能?
- 用语句怎么建立两表之间的主从关系,并显示在DATAGRID1,DATAGRID2 里?
- 如何始终监视数据库中某一个字段的变化?
public virtual void Sort(IComparer)
这人方法,你只需要根据实现IComparer的排序类就可以,
实现的方法可以sniperfox(飞翔的心) 所说的.
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 ) );
}
}
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 );
}
}
}
}
//参考的例子,按名称进行排序。
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();