tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル2次元配列の重複を除く
記事No11499
投稿日: 2015/10/01(Thu) 11:43
投稿者ace
VB.NETで
一次元配列の重複を除く処理
        Dim data_s As String() = data_w.Distinct().ToArray()
で、出来ましたが
二次元配列の場合は、どのようにすれば良いでしょうか?

a列 ,b列
-----------
1001,あああ
1002,あああ
1003,あいう

でb列のみ重複を見る。
重複があればa列の最大値を表示したい。

この結果
a列 ,b列
-----------
1002,あああ
1003,あいう

としたい。

データは蓄積されてどんどん増えていくので
LOOPだと時間がかかってしまう。
簡単な方法があればご教授願います。

[ツリー表示へ]
タイトルRe: 2次元配列の重複を除く
記事No11500
投稿日: 2015/10/02(Fri) 12:12
投稿者魔界の仮面弁士
> 重複があればa列の最大値を表示したい。
a 列の重複は無いのですか?

> データは蓄積されてどんどん増えていくので
蓄積型のデータを配列で管理するというのが、そもそも問題です。

管理は Dictionary、List、DataTable 等で行った方が良いと思いますよ。
二次元配列との相互変換のメソッドを作りこむのも、そう難しくは無いでしょうし。


配列は、項目の追加・削除等を自由に行える仕組みが無いため、
ReDim Preserve や Array.Copy のたびに、メモリの再確保が行われ、
処理速度やメモリ面でも、あまり効率が良くありません。
(格納済みのデータを列挙するだけなら効率的なのですが)

[ツリー表示へ]
タイトルRe^2: 2次元配列の重複を除く
記事No11501
投稿日: 2015/10/02(Fri) 12:24
投稿者ace
連絡ありがとうございます。


> > 重複があればa列の最大値を表示したい。
> a 列の重複は無いのですか?

a列はユニークで重複はありません。

もともとSQLサーバーの(蓄積された)データを検索して
配列に落としていました。
その配列の中で、ある条件のとき
データグリッドに表示する処理です。
(説明不足ですいません・・・)

とりあえず、SQLサーバーから落としたデータを
2次元配列ではなく1次元配列(B列)にして
重複を取り除きました。
その後、そのデータをSQLの検索項目にして
a列の最新情報を拾うようにしました。

これも時間がかかりますが・・・。

a列を表示するか、しないかをユーザー任意にすることで
了解を得ましたので、今はこの方法で使用しています。

[ツリー表示へ]
タイトルRe^3: 2次元配列の重複を除く
記事No11502
投稿日: 2015/10/02(Fri) 16:57
投稿者YuO
真っ当な方法はDTOなりのオブジェクトのListなどを用意することだと思います。
手を抜くならTupleとか。
.NET Framworkの1次元でない配列へのサポートは非常に弱いので,
それを使うくらいならTupleの配列にしてしまった方が使いやすいと思います。

……というか,集計自体をSQL Serverで(GROUP BYとMAXを使って)やる,というのが一番楽な気がしますが。

[ツリー表示へ]