プロが教えるわが家の防犯対策術!

C#についての質問です。

現在、ArrayListを用いた情報管理リストのプログラムを作成しています。
そのプログラムにソートを行う機能をつけたいのですが、そこで質問です。
ArrayList内の要素を、「特定のフィールド(例えば氏名であったり、年齢であったりするのですが…)を基準として昇順または降順にソートする」という処理を行う際、IComparable および IComparerを使用する以外の方法で、この機能を実装することは可能でしょうか?
独自に調べてはみたのですが、いまいちわからず、質問させていただきました。

お分かりになられる方がいらっしゃいましたら、ご助言をお願いいたします。

A 回答 (1件)

ArryListのSortを使わずに自前のソートルーチンを装備すればいいだけではないですか



たとえば
void mySort( ArrayList arSrc, ref ArrayList arDes, string strFld, int nSortDir)
{
  object[] obj = arSrc.ToArray();
  PERSON[] ar = new PERSON[ obj.Length ];
  Array.Copy( obj, ar, obj.Length );
  if ( ( nSortDir != 1 ) && ( nSortDir != 2 ) ) {
    return;
  }
  if ( ( strFld != "age" ) && ( strFld != "name" ) ) {
    return;
  }
  for( int n = 0; n < ar.Length-1; n++ )
  {
    for ( int m = ar.Length - 1; m > n; m-- )
    {
      PERSON tmp;
      if ( strFld == "age" )
      {
        if ( ( ( nSortDir == 1 ) && ( ar[n].age > ar[m].age ) ) ||
          ( ( nSortDir == 2 ) && ( ar[n].age < ar[m].age ) )
        {
          tmp = ar[n];
          ar[n] = ar[m];
          ar[m] = tmp;
        }
      } else {
        if ( ( ( nSortDir == 1 ) && ( ar[n].name。CompareTo( ar[m].name )>= 0 ) ) ||
           ( ( nSortDir == 2 ) && ( ar[n].name.ComapreTo(ar[m].name)<0 ) ) )
        {
          tmp = ar[n];
          ar[n] = ar[m];
          ar[m] = tmp;
        }
      }
    }
  }
  arDest.Clear();
  arDest.Addrange( ar );
}

といった具合で ・・・
    • good
    • 0
この回答へのお礼

おっしゃるとおりですね!
調べているとどうしてもIComparable および IComparerを使用する方法ばかりが見つかるので、自分でソートルーチンを作ることがすっかり頭から抜け落ちていました;;
コードの一例まで記述してくださってありがとうございました!

お礼日時:2008/10/29 13:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!