簡単に逆順ソート(降順ソート)を実施する

簡単にやるには普通に昇順ソート(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() );

}