C#についての質問です。
現在、ArrayListを用いた情報管理リストのプログラムを作成しています。
そのプログラムにソートを行う機能をつけたいのですが、そこで質問です。
ArrayList内の要素を、「特定のフィールド(例えば氏名であったり、年齢であったりするのですが…)を基準として昇順または降順にソートする」という処理を行う際、IComparable および IComparerを使用する以外の方法で、この機能を実装することは可能でしょうか?
独自に調べてはみたのですが、いまいちわからず、質問させていただきました。
お分かりになられる方がいらっしゃいましたら、ご助言をお願いいたします。
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 );
}
といった具合で ・・・
おっしゃるとおりですね!
調べているとどうしてもIComparable および IComparerを使用する方法ばかりが見つかるので、自分でソートルーチンを作ることがすっかり頭から抜け落ちていました;;
コードの一例まで記述してくださってありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- その他(パソコン・スマホ・電化製品) エクセル初心者です。 仕事でエクセルを使っていて、普段は素人でもできる簡単な関数を使ったことがある程 1 2022/05/25 11:17
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- Illustrator(イラストレーター) アイビスペイント、原稿作成について 1 2023/07/14 03:01
- デスクトップパソコン 「自動修復でPCを修復できませんでした」と表示されPCが起動しないのですが対処法はありますか? 5 2022/05/13 09:16
- その他(Microsoft Office) 1の行を固定した上でVBAを用いて日付順に自動並べ替え 2 2022/06/06 15:09
- 哲学 公証・株・契約・金に共通する社会哲理要素とその再応用について 2 2023/06/24 23:11
- PHP 「ログイン機能を持たせる」説明が気難しいです。 2 2022/10/11 02:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
ファイル名「1.jpg ~10.jpg~...
-
列のどこをクリックしてもソー...
-
DataGridViewの複数列を連動し...
-
EXCEL VBAのソートについて
-
Excel VBA テキストボックス内...
-
excel VBA の条件をつけての列...
-
C言語・要素除去
-
listboxの並び替え
-
コーディングの参考
-
Excelですべての組合せ(重複組...
-
コレクションの数値をSortで並...
-
該当のセルのみを2次元配列に入...
-
構造体配列の並べ替え
-
偶数奇数の判別!!
-
qsortについて
-
DataGridViewで選択行が変わる...
-
4番目以降の並べ替え
-
vbでDataTableの抽出コピー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
C# DataGridView のヘッダーセ...
-
ファイル名「1.jpg ~10.jpg~...
-
C# DataTableの行をソートしてD...
-
あるディレクトリ内のファイル...
-
excel VBA の条件をつけての列...
-
excel VBA リストビューの行...
-
DataGridViewの複数列を連動し...
-
文字列をソートする方法
-
Excelですべての組合せ(重複組...
-
列のどこをクリックしてもソー...
-
n番目に大きい数を求めるアル...
-
Excel VBAで並べ替えをしたい
-
DataGridViewの昇順降順。
-
vbでDataTableの抽出コピー
-
数字文字列のソート方法
-
VB6でデータを昇順に並べ替える
-
VBScriptで重複レコードを削除...
-
ListViewのソートについて
おすすめ情報