簡単に逆順ソート(降順ソート)を実施する
簡単にやるには普通に昇順ソート(Sort)してから、そのデータを逆に(Reverse)並び替えてやればいいです。データ数が少なくて実行速度に問題がないと判断される場合は、この方法がラクなのでおすすめです。
何千万件もあるデータを逆順ソートするにはそれなりの方法があるので、それは他のいろんなサイトをご参照ください。
下記に示すコードは、
・文字列型の配列
・文字列型のリスト
・日付型の配列
・日付型リスト
の逆順ソートを簡単に実施する方法です。
文字列型の配列を逆順ソートする
// 文字列の配列を逆順ソートする.
private void button1_Click( object sender, EventArgs e )
{
String [] data = new String[5];
data[0] = "あいうえお";
data[1] = "さしすせそ";
data[2] = "なにぬねの";
data[3] = "かきくけこ";
data[4] = "たちつてと";
// 小から大でソート.
Array.Sort( data );
// それを逆にして、大から小へソートしたことと同じ.
Array.Reverse( data );
// 結果を表示するためのストリングビルダ.
StringBuilder sb = new StringBuilder();
for ( int n = 0; n < data.Length; n++ )
{
sb.AppendLine( data[n] );
}
// メッセージボックスとして結果を表示する.
MessageBox.Show( sb.ToString().Trim() );
}
文字列型のリストを逆順ソートする
// 文字列のリストを逆順ソートする.
private void button2_Click( object sender, EventArgs e )
{
List<String> list = new List<String>(0);
list.Add( "あいうえお" );
list.Add( "さしすせそ" );
list.Add( "なにぬねの" );
list.Add( "かきくけこ" );
list.Add( "たちつてと" );
// 小から大でソート.
list.Sort();
// それを逆にして、大から小へソートしたことと同じ.
list.Reverse();
// 結果を表示するためのストリングビルダ.
StringBuilder sb = new StringBuilder();
for ( int n = 0; n < list.Count; n++ )
{
sb.AppendLine( list[n] );
}
// メッセージボックスとして結果を表示する.
MessageBox.Show( sb.ToString().Trim() );
}
日付型の配列を逆順ソートする
// 日付型の配列を逆順ソートする.
private void button3_Click( object sender, EventArgs e )
{
DateTime [] data = new DateTime[5];
data[0] = new DateTime( 2001, 1, 11 );
data[1] = new DateTime( 2003, 3, 13 );
data[2] = new DateTime( 2005, 5, 15 );
data[3] = new DateTime( 2002, 2, 12 );
data[4] = new DateTime( 2004, 4, 14 );
// 古から新にソート.
Array.Sort( data );
// それを逆にして、新から古へソートしたことと同じ.
Array.Reverse( data );
// 結果を表示するためのストリングビルダ.
StringBuilder sb = new StringBuilder();
for ( int n = 0; n < data.Length; n++ )
{
sb.AppendLine( data[n].ToString( "yyyy/MM/dd" ) );
}
// メッセージボックスとして結果を表示する.
MessageBox.Show( sb.ToString().Trim() );
}
日付型のリストを逆順ソートする
// 日付型のリストを逆順ソートする.
private void button4_Click( object sender, EventArgs e )
{
List<DateTime> list = new List<DateTime>(0);
list.Add( new DateTime( 2001, 1, 11 ));
list.Add( new DateTime( 2003, 3, 13 ));
list.Add( new DateTime( 2005, 5, 15 ));
list.Add( new DateTime( 2002, 2, 12 ));
list.Add( new DateTime( 2004, 4, 14 ));
// 古から新にソート.
list.Sort();
// それを逆にして、新から古へソートしたことと同じ.
list.Reverse();
// 結果を表示するためのストリングビルダ.
StringBuilder sb = new StringBuilder();
for ( int n = 0; n < list.Count; n++ )
{
sb.AppendLine( list[n].ToString( "yyyy/MM/dd" ) );
}
// メッセージボックスとして結果を表示する.
MessageBox.Show( sb.ToString().Trim() );
}