C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

2次元配列の重複チェックの方法

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■90819 / inTopicNo.1)  2次元配列の重複チェックの方法
  
□投稿者/ 河童 (49回)-(2019/04/24(Wed) 19:39:32)

分類:[C#] 

いつも大変お世話になっております。

2次元配列に同じデータがないかどうか重複チェックをしたいです。

match_listに同じデータがない場合に新規のデータを登録したいです。
要素0から2までがすべて同じ場合は除外したいです。

最初から2次元配列ではなくListにすればよいのですが、
今回は2次元配列で重複チェックをどうしても行いたいです。

わからないことは、2次元配列で
ListのIndexOfメソッドのようなものがないでしょうか?

よろしくお願いいたします。

public string[,] match_list = new string[1000, 6];      

for (int i = 0; i < DataCount; i++)
{

	//match_list[match_count, 0] = data_inp[i, 0];
	//match_list[match_count, 1] = data_inp[i, 1];
	//match_list[match_count, 2] = data_inp[i, 2];

	for (int j = match_list.GetLowerBound(1); j <= match_list.GetUpperBound(1); j++)
	{

		if ((match_list[j, 0] != data_inp[i, 0]) && (match_list[j, 1] != data_inp[i, 1]) && (match_list[j, 2] != data_inp[i, 2]))
		{
			match_list[match_count, 0] = data[i, 0];
			match_list[match_count, 1] = data[i, 1];
			match_list[match_count, 2] = data[i, 2];
		}
	}
}

引用返信 編集キー/
■90820 / inTopicNo.2)  Re[1]: 2次元配列の重複チェックの方法
□投稿者/ kaina (49回)-(2019/04/24(Wed) 20:03:11)
お好きなように
https://dobon.net/vb/dotnet/programing/arraycontains.html

引用返信 編集キー/
■90821 / inTopicNo.3)  Re[1]: 2次元配列の重複チェックの方法
□投稿者/ Hongliang (789回)-(2019/04/24(Wed) 20:26:55)
> わからないことは、2次元配列で
> ListのIndexOfメソッドのようなものがないでしょうか?
標準ライブラリには存在しません。
引用返信 編集キー/
■90833 / inTopicNo.4)  Re[1]: 2次元配列の重複チェックの方法
□投稿者/ キングダム (20回)-(2019/04/28(Sun) 21:11:03)
No90819 (河童 さん) に返信

シンプルで良い実装だなって思いました
よく使うようでしたらこれをメソッドに切り出して
汎用化しちゃえばいんじゃないでしょうか

仮に大量のデータを処理しなければならなくて
少しでも計算量を改善したいんですってことなら
どうするかなーと考えると、二次元配列をラッピングしたクラスを作って
ジャグ配列を模倣することができればインデックスソートを使って
match_listとdataをソートしてリストを比較するように先頭から順番に
比較していくことができそうだなーとか

match_listをソートして一列ずつ二分探索で範囲を絞り込んでいけば
平衡三分探索木で実装したトライツリーをたどるのとほぼ同じ計算量になりそうだなーとか

ハッシュテーブルを使うのもありかなーとか思いました
あまり風呂敷広げすぎると畳めなくなるのでこのへんでやめようと思いますが
そんな感じです


引用返信 編集キー/
■90834 / inTopicNo.5)  Re[2]: 2次元配列の重複チェックの方法
□投稿者/ キングダム (21回)-(2019/05/03(Fri) 03:10:53)
2019/05/06(Mon) 01:14:40 編集(投稿者)

実装してみました

IndexOfを使った方法
https://paiza.io/projects/mRzmYAX7nzsBSL-w4PmTIw?language=csharp

Sortを使った方法
https://paiza.io/projects/IXTiypQVrSq32sc5D42UYA?language=csharp

HashSetを使った方法
https://paiza.io/projects/c3VHor6kO7cUy7teruXW-g?language=csharp

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ