• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C# ArrayList内の要素の並べ替え。)

C# ArrayList内の要素の並べ替え

このQ&Aのポイント
  • C#についての質問です。ArrayListを用いた情報管理リストのプログラムにソート機能を実装したいです。特定のフィールドを基準に昇順または降順にソートする方法がわかりません。
  • C#についての質問です。ArrayList内の要素を特定のフィールドを基準に昇順または降順にソートする方法について教えてください。
  • C#について質問があります。ArrayListを使用した情報管理リストのプログラムにソート機能を追加したいですが、IComparableやIComparer以外でソートを実装する方法がわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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 ); } といった具合で ・・・

noname#114110
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C# ArrayListを二次元配列のように使用したい。

    C#についての質問です。 現在、ArrayListを用いた情報管理リストのプログラムを作成しています。 そのプログラムにソートを行う機能と、検索機能をつけたいのですが、そこで質問です。 ArrayList内の要素を、「特定のフィールド(例えば氏名であったり、年齢であったりするのですが…)を基準として昇順または降順にソートする」という処理、またあるフィールドのみを基準に検索を行うという処理を行う際、ArrayListを二次元配列のように使用することが出来たら便利だな、と思ったのですが、そのようなことは可能でしょうか? いろいろと試したり、独自に調べてはみたのですが、いまいちわからず、質問させていただきました。 お分かりになられる方がいらっしゃいましたら、ご教授いただければと思います。 よろしくお願いいたします。

  • ArrayListなどのソート

     いつもお世話になっています。ArrayListなどをソートする際に、Comparatorインターフェースを実装したクラスを利用して、辞書順や数値順などでソートすることは出来ますよね。これを任意の単語の順番にソートするにはどのようにすればよいのでしょうか。つまり、下記例において、文字列順ではなくて、"ONE", "TWO", "THREE", "FOUR"の順番にソートしたいのです。 ArrayList list = new ArrayList(); list.add("THREE"); list.add("ONE"); list.add("FOR"); list.add("TWO");  やはりcompare()メソッド内で総当り的に比較するしかないのでしょうか。  開発環境はJDK1.4です。事情により返答が遅れてしまうかもしれませんが、どうぞ宜しくお願い致します。

    • ベストアンサー
    • Java
  • ArrayListでの要素の取り出し

    Javaについて質問です。 名前順にソートしたArrayListのある要素だけを取り出して、 DefaultListModelに追加していきたいのですが、 book = new AddressBook(); book.add(new Address(太郎,住所,電話番号,メールアドレス)) book.add(new Address(花子,住所,電話番号,メールアドレス)) この例で、1番目の要素の名前だけ取り出すにはどうすればいいのでしょうか。 model.clear(); book.shellSort(); for(int i = 0; i < book.size(); i++){ String[] field = (String)book.get(i).split(",");//←ここでエラーになります。 model.addElement(field[0]); } ObjectとStringの扱いが分からず立往生です… 回答お待ちしております。

  • ArrayListのソートについて

    プログラム上でListViewのカラムをクリックするとソートされる プログラムを作ろうと入れたのですが、リストはソートされるのに 中身(ArrayList)がソートされていないためソート後のアイテムを クリックしても違う値しか出てきません。 それにはArrayListのソートが必要と言う事が書いてあったので 実装をしてみたのですが、比較ができないようなエラーが出て うまくソートもできませんでした。 どうすればListViewのカラムソートと連動してArrayListのソートが 出来るようになるでしょうか? 開発環境はVS2005(C#) .NET2.0です。 サンプルクラスは以下の通りです。 public void UpdateListView() { ArrayList list = null; if (listView1.Columns[1].Text == "差出人") { // 受信メールの場合 list = collectionMail[RECEIVE]; } else if (listView1.Columns[1].Text == "差出人または宛先") { // 削除メールの場合 list = collectionMail[DELETE]; } listView1.BeginUpdate(); // リストビューの内容をクリアする listView1.Items.Clear(); // ListViewを設定する foreach (Mail mail in list) { ListViewItem item = new ListViewItem(mail.subject); item.SubItems.Add(mail.address); listView1.Items.Add(item); } listView1.EndUpdate(); } private void Form1_Load(object sender, EventArgs e) { // ListViewにアイテムを追加する for (int no = 0; no < subject.Length; no++) { Mail mail = new Mail(subject[no], address[no], body[no]); collectionMail[RECEIVE].Add(mail); } UpdateTreeView(); UpdateListView(); } public class Mail { public string subject; public string address; public string body; public Mail(string subject, string address, string body) { this.subject = subject; this.address = address; this.body = body; } }

  • ArrayListはListのデフォルト実装とは?

    「ArrayListはListのデフォルト実装」と書いてあるのですが、どういう意味でしょうか? http://topickup.web.fc2.com/java/list_arraylist.html ■自分の理解 ・List … インターフェイス ・ArrayList … インターフェイスを実装するクラスの中の一つ。どの実装クラスを利用するかはユーザーが選択? ■疑問点 ・Listインターフェイスのリファレンスに、デフォルト実装について明記されているかと思ったのですが、見つかりません ・どこかに書いているのでしょうか? http://docs.oracle.com/javase/jp/7/api/java/util/List.html ・検索したら、似た言葉で「デフォルトメソッド」があるのですが、「デフォルト実装」と同じ意味でしょうか? ・「デフォルトメソッド」はJava8の新機能? Java7以下では使えない?

    • ベストアンサー
    • Java
  • エクセルの並べ替えは充分な機能ではないですよね?

    エクセルの並べ替えは充分な機能ではないですよね? 多数のリストを並べ替えするとき、必ずしも昇順、降順に正しく並べ替えられません。 私の他にも経験者の方いらっしゃいますか?

  • C言語の問題なのですが、分からないので教えて下さい

    以下のようなメニューを表示し,各項目の機能を実現して結果を表示するプログラムを作成せよ。 リストは1つとし,初期値は「15 4 32 1」である。 ・データの追加,削除を行う関数を作成する。 ・データの追加に関して,そのデータはリストの最後に挿入されるものとする。 ・データのソート(降順)を行う関数を作成する。 ・リストの平均値を計算し出力する関数を作成する。 ------表示例------- 1.データの追加 2.データの削除 3.データのソート(降順) 4.リストの平均値 5.終了 何を実行しますか: ------------------- ------実行例------- 1.データの追加 2.データの削除 3.データのソート(降順) 4.リストの平均値 5.終了 何を実行しますか:1 追加するデータを入力してください:10 リスト: 15 4 32 1 10 1.データの追加 2.データの削除 3.データのソート(降順) 4.リストの平均値 5.終了 何を実行しますか:4 リストの平均値:12.4 リスト: 15 4 32 1 10 1.データの追加 2.データの削除 3.データのソート(降順) 4.リストの平均値 5.終了 何を実行しますか:3 リスト: 32 15 10 4 1

  • STLのlistのソートについて教えてください。

    STLで何か作ってみようと思っているのですが、複数のメンバを持つ構造体オブジェクトのリスト(要素の値が構造体オブジェクトであるリスト)を、その構造体オブジェクトのメンバの中の1つのをキーとして昇順、又は降順にソートしようとした場合、どのようにすればよいのでしょうか?? http://www5c.biglobe.ne.jp/~ecb/cpp/07_08.html ここを見ると、sort() という関数があるようですが、単に昇順でソートする、としか書いていなく、構造体のリストのソートはどうするのだろうと疑問です。 詳しい方いらっしゃいましたらご教授頂けると幸いです。

  • ArrayListのパッケージがlistでない理由

    ・パッケージについて教えてください ■質問1 ・ArrayListのパッケージは、どうして「java.util.List」ではなくて「java.util.ArrayList」なのでしょうか? ・ArrayListは、Listインターフェイス実装クラスなのでListに紐付いている、と思ったのですが… ・「java/util/List.interface」と「java/util/ArrayList.class」は並列の位置づけになるのでしょうか? ・そういう決まりだから? ・Listインターフェイスのパッケージ名は下記で確認するのでしょうか? ・http://docs.oracle.com/javase/jp/7/api/java/util/List.html ■質問2 ・「import java.util.*;」表記ができるなら、全部これで良いようにも思うのですが、どういう風に使い分けるのでしょうか? ・普通はどちらを使う、とかあるのでしょうか?

    • ベストアンサー
    • Java
  • ASP.NET 2.0(C#) GridViewのソート機能をデフォルトで降順にしたい

    GridViewコントロールで「並べ替えを有効」にすると、各フィールドごとに、ヘッダーのリンクをクリックするたびに昇順→降順でソートできるようになりますが、これをあるフィールドだけ、降順→昇順にすることはできないでしょうか? GridView1のSortingイベントで protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { //hogeフィールドだけデフォルトで降順にしたい if (e.SortExpression == "hoge") { if (e.SortDirection == SortDirection.Ascending) e.SortDirection = SortDirection.Descending; else e.SortDirection = SortDirection.Ascending; } } などとしてみたのですが、これでは常に降順になってしまいます。 よろしくお願いします。