- PR -

ArrayListの中身を並び替え、指定した数だけ取り出したい。

1
投稿者投稿内容
hoshino
常連さん
会議室デビュー日: 2007/02/21
投稿数: 46
投稿日時: 2007-03-21 18:23
たびたびお世話になります。

現在私は、クラスでDBからデータを取得し、それをArrayListに格納し、
それを画面で呼び出しGridViewなどにバインドさせているのですが、
呼び出し時にArrayListの任意のpropertyなどに格納されている値をもとに、
昇順に並び替え、さらに並び替えられたデータの上から指定した順位までのデータだけをGridViewにバインドさせたいと考え、色々調べてみたのですが、全く解決できず
皆様のお力を貸していただければと思い、投稿させていただきました。

詳しく書きますと、例えば、nameとdateというpropertyを持つクラスで、
sampleというfunction内において

Dim reader As DbDataReader = command.ExecuteReader()
Do While reader.Read()
Dim test As New クラス
test.name = reader.GetString(0)
test.date = reader.GetString(1)
ArrayList.Add(test)
Loop
Return ArrayList

として、その戻り値を呼び出し

Dim A As New クラス
/*ここで処理を加えたい*/
GridView.DataSource = A.sample()
GridView.DataBind()

という場合、dateに格納されている値を元に、昇順に並び替え、
さらに並び替えられたデータの内上から5番目だけを取り出し、GridViewに表示させたいということです。

何か良い方法やご意見等ございましたら、ご教授いただければ幸いです。
皆様よろしくお願いいたします。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-03-21 18:41
ArrayList.Sort(IComparer)
ArrayList.CopyTo(Int32, Array, Int32, Int32)

詳細はそれぞれのヘルプを参照してください。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/

[ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2007-03-21 18:41 ]
hoshino
常連さん
会議室デビュー日: 2007/02/21
投稿数: 46
投稿日時: 2007-03-21 19:01
渋木宏明(ひどり)様。

早々にお返事ありがとうございます。
早速詳細のほう調べてみようと思います。

ありがとうございました。
hoshino
常連さん
会議室デビュー日: 2007/02/21
投稿数: 46
投稿日時: 2007-03-21 20:02
連続での投稿失礼いたします。

ただ今必死で調べてみたのですが、私の力が及ばず、
まだ理解にはいたっておりません。

もしよろしければ、この場合、IComparerには何を入れればよいのか、
ご教授いただければ幸いでございます。

ヒントをいただいておきながらまた質問をして申し訳ございません。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-21 20:22
引用:

hoshinoさんの書き込み (2007-03-21 20:02) より:

ただ今必死で調べてみたのですが、私の力が及ばず、まだ理解にはいたっておりません。
もしよろしければ、この場合、IComparerには何を入れればよいのか、ご教授いただければ幸いでございます。


ヒントを生かせるような検索をすると自己解決できたかもしれませんね。
ArrayList.Sort(IComparer) (microsoft.com)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
hoshino
常連さん
会議室デビュー日: 2007/02/21
投稿数: 46
投稿日時: 2007-03-21 21:25
ご返事ありがとうございます。

ご指定のページは拝見したのですが、正直これをどのように表示させればよいのかなど
わからない点が多く理解には及ばなかったため、もう少し勉強してみることにいたします。

また何かアドバイス等ございましたらご教授いただければ幸いです。
しつれいいたします。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-03-21 21:38
コード:
public class クラス
{
	public string name;
	public int data;
}

public class クラスnameComparer : IComparer
{
	public int Compare(object x, object y)
	{
		// x.name と y.name の順序を比較する
	}
}

public class クラスdataComparer : IComparer
{
	public int Compare(object x, object y)
	{
		// x.data と y.data の順序を比較する
	}
}

class Program
{
	static void Main(string[] args)
	{
		ArrayList list = new ArrayList();

		// list に値を追加

		// name でソート
		list.Sort(new クラスnameComparer());

		// data でソート
		list.Sort(new クラスdataComparer());
	}
}


こんな感じです。

データの総件数にもよりますが、DBMS にソートさせて必要件数分を取得するような SQL を書いた方がよいでしょうけどね。
_________________
囚人のジレンマな日々
hoshino
常連さん
会議室デビュー日: 2007/02/21
投稿数: 46
投稿日時: 2007-03-21 21:57
囚人様。

ご丁寧に教えてくださってありがとうございます。
非常に勉強になります。

早速試してみます。

本当にありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)