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

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

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

配列同士を比較する

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

■96027 / inTopicNo.1)  配列同士を比較する
  
□投稿者/ やま (4回)-(2020/10/16(Fri) 17:18:17)

分類:[.NET 全般] 

開発環境 VS2019
C#Windowsフォーム

現在、要素数200のリストの中にstring型の配列(要素数6)が含まれるか検索するという事をしようとしています。

が比較対象の要素数が違いすぎるからか、繰り返しで検索しようとするとindexの境界外になってしまいます。
foreach(型 変数名 in 要素数200)
{ 
  if(要素数200[count]==要素数6[count])
{
あるよと表示
}
else
{
ないよと表示
}
count++;
}


逆にforeach部分を要素数6の回数しか回らないようにすると
要素数の前半しか見てくれず、後半にあるものは全て「ない」と判定され困っています。

どうか教えてください。

引用返信 編集キー/
■96030 / inTopicNo.2)  Re[1]: 配列同士を比較する
□投稿者/ WebSurfer (2128回)-(2020/10/16(Fri) 17:48:32)
No96027 (やま さん) に返信

> 現在、要素数200のリストの中にstring型の配列(要素数6)が含まれるか検索するという事をしようとしています。

意味が分かりません。もっと具体的に、ここに書いてないこと以外は知り得ない第三者が
余計な想像をしなくても分かるように書いてもらえませんか?

そもそもの「要素数200のリスト」って何ですか?

「string型の配列(要素数6)」とは何ですか?

「含まれる」とは具体的にどういうことを言ってますか?
引用返信 編集キー/
■96033 / inTopicNo.3)  Re[2]: 配列同士を比較する
□投稿者/ やま (5回)-(2020/10/16(Fri) 18:06:08)
var a= new List<string>(){ "赤", "黄", "青" };


string []b=new string[]{"赤","青","紫","黄","紺","銀色"}

を使い、aの中にある色がbにあるのか確認したいという事です。
あるときとないときで、処理を分けたいので

if (object.ReferenceEquals(ary1, ary2))
{
//同一のインスタンスの時は、同じとする
isEqual = true;
}

はなしでお願いします。

引用返信 編集キー/
■96035 / inTopicNo.4)  Re[3]: 配列同士を比較する
□投稿者/ みい (120回)-(2020/10/16(Fri) 18:46:22)
2020/10/16(Fri) 18:48:01 編集(投稿者)
含まれるかどうかだけでいいのかな?

bool bEqual = false;
for (int iIdx = 0; iIdx < a.Count ; iIdx++)
{
    if (0 <= Array.IndexOf(b, a[iIdx]))
    {
        bEqual = true;
        break;
    }
}
な感じ?

引用返信 編集キー/
■96036 / inTopicNo.5)  Re[3]: 配列同士を比較する
□投稿者/ WebSurfer (2130回)-(2020/10/16(Fri) 18:46:24)
No96033 (やま さん) に返信
> var a= new List<string>(){ "赤", "黄", "青" };
>
> と
> string []b=new string[]{"赤","青","紫","黄","紺","銀色"}
>
> を使い、aの中にある色がbにあるのか確認したいという事です。

ならばあなたが最初に書いたようにループを回してチェックしては?

最大 6 x 200 でできるはず。

Linq を使ってカッコよくとか、6 x 200 回ぐらいなら効率を考えるとか忘れていいのでは?

引用返信 編集キー/
■96052 / inTopicNo.6)  Re[3]: 配列同士を比較する
□投稿者/ kiku (201回)-(2020/10/19(Mon) 09:17:37)
No96033 (やま さん) に返信
> var a= new List<string>(){ "赤", "黄", "青" };
> 
> と
> string []b=new string[]{"赤","青","紫","黄","紺","銀色"}
> 
> を使い、aの中にある色がbにあるのか確認したいという事です。
>  あるときとないときで、処理を分けたいので

こんな感じで。
            //テストデータ
            var a = new List<string>() { "赤", "黄", "青", "金色" };
            var b = new string[] { "赤", "青", "紫", "黄", "紺", "銀色" };

            //foreachのみで実現
            Console.WriteLine("==================");
            var result = false;
            foreach (var item_a in a)
            {
                result = false;
                foreach(var item_b in b)
                {
                    if(item_a == item_b)
                    {
                        result = true;
                        break;
                    }
                }
                if (result)
                {
                    Console.WriteLine($"{item_a}はあった");
                }
                else
                {
                    Console.WriteLine($"{item_a}はなかった");
                }
            }

            //同じことをLINQで実現
            Console.WriteLine("==================");
            var list = a.Select(item_a => b.Any(item_b => item_b == item_a) ? $"{item_a}はあった" : $"{item_a}はなかった").ToList();
            foreach(var item in list)
            {
                Console.WriteLine($"{item}");
            }

引用返信 編集キー/
■96054 / inTopicNo.7)  Re[1]: 配列同士を比較する
□投稿者/ 大谷刑部 (116回)-(2020/10/19(Mon) 09:58:24)
No96027 (やま さん) に返信
> が比較対象の要素数が違いすぎるからか、繰り返しで検索しようとするとindexの境界外になってしまいます。
> foreach(型 変数名 in 要素数200)
> { 
>   if(要素数200[count]==要素数6[count])
> {
> あるよと表示
> }
> else
> {
> ないよと表示
> }
> count++;
> }
当たり前かと。200回回すカウンタ変数と同じ変数ならそうなりますよね。

素直に考えれば、ifの判定箇所を6回まわるループ(見つかったら抜ける)にすればいいだけかと思います。

引用返信 編集キー/
■96056 / inTopicNo.8)  Re[4]: 配列同士を比較する
□投稿者/ やま (6回)-(2020/10/19(Mon) 11:02:36)
No96052 (kiku さん) に返信
> ■No96033 (やま さん) に返信
>>var a= new List<string>(){ "赤", "黄", "青" };
>>
>>と
>>string []b=new string[]{"赤","青","紫","黄","紺","銀色"}
>>
>>を使い、aの中にある色がbにあるのか確認したいという事です。
>> あるときとないときで、処理を分けたいので
>
> こんな感じで。
> //テストデータ
> var a = new List<string>() { "赤", "黄", "青", "金色" };
> var b = new string[] { "赤", "青", "紫", "黄", "紺", "銀色" };
>
> //foreachのみで実現
> Console.WriteLine("==================");
> var result = false;
> foreach (var item_a in a)
> {
> result = false;
> foreach(var item_b in b)
> {
> if(item_a == item_b)
> {
> result = true;
> break;
> }
> }
> if (result)
> {
> Console.WriteLine($"{item_a}はあった");
> }
> else
> {
> Console.WriteLine($"{item_a}はなかった");
> }
> }
>
> //同じことをLINQで実現
> Console.WriteLine("==================");
> var list = a.Select(item_a => b.Any(item_b => item_b == item_a) ? $"{item_a}はあった" : $"{item_a}はなかった").ToList();
> foreach(var item in list)
> {
> Console.WriteLine($"{item}");
> }
>

有難うございました。
出来ました。
解決済み
引用返信 編集キー/

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


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

このトピックに書きこむ