質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1496閲覧

二つの配列が一致しているか調べる

Koopa

総合スコア28

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/11/11 15:11

編集2018/11/12 14:20

あることがあって、配列を比較したくなりまして、ね
二つの配列A,Bについて
A==B
を行ったところ、要素が位置も含め完全に一致しているのに素通りしてしまってね

こんな実験をしてみることにした ※ここではstring型でやりましたが実際はVector3型で使ってます

C#

1using System; 2using System.Linq; 3using System.Collections.Generic; 4 5//宣言------------------------------------------------------------------------------------ 6string[] strA={"one","two","three","two"};//基準 7string[] strB={"one","two","three","two"};//Aと全く同じ 8string[] strC={"two","one","two","three"};//Aとそれぞれ要素の個数同じ、位置が違う 9string[] strD={"three","three","two","one"};//含まれる要素はそろえているが個数も位置も違う、 10                         //しかし配列の長さ同じ 11 12//出力------------------------------------------------------------------------------------ 13print(strA==strB);//false。てかこいつがtrueなら質問しなくて済んでた!! 14print(strA.Union(strB).Lenth==strA.Lenth);//trueしかし 15print(strA.Union(strD).Lenth==strA.Lenth);//true 16 17print(strA.Union(strB).Lenth == strB.Union(strA).Lenth);//trueしかし 18print(strA.Union(strD).Lenth == strD.Union(strA).Lenth);//true 19 20print(new[]{strA}.Union(new[]{strB}).Lenth==1);//false 21print(new[]{strA}.Contains(strB));//false 22print(Array.IndexOf(strB,new[]{strA}))//-1 23 24print(strA.Count(A=> strA.Count(a=>a==A) == strB.Count(b=>b==A))==strA.Count);//trueしかし 25print(strA.Count(A=> strA.Count(a=>a==A) == strC.Count(c=>c==A))==strA.Count);//true

最後の奴は通りますが強引すぎて処理数が多すぎます!遅い!第一今回やりたいこととちょっと違います!!
とはいえ、頭悪すぎてこんな感じのばっかりしか思いつきませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

C#

1print(strA.Select((A,ix) => A == strB[ix]).All(T=>T));

追記
配列長違う場合を考慮してませんでした。

C#

1print(strA.Length == strB.Length && strA.Select((A,ix) => A == strB[ix]).All(T=>T));

更に詳しく調べたところ、Enumerable.SequenceEqualなんかもありましたが

結局、普通にfor文ぶん回したほうが速いらしいです。

投稿2018/11/11 15:44

編集2018/11/11 16:11
asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Koopa

2018/11/11 16:10 編集

助けていただき、本当にありがとうございます!! おかげさまで実装も問題なく行うことができて、感謝の限りです! そして、なるほどSelect関数には触れたことがありませんでしたが、 これを機に、これからはもっと勉強して、視野に入れていこうと思います。 本当にありがとうございました!
Koopa

2018/11/12 11:24 編集

さらに詳しい追記ありがとうございます 確認しました。どうやら、本当にそのようですね。for文って意外にすごいんだなぁ あと、Select文と関連でWhere文も勉強させて頂きました。親切にしてくれて嬉しいです。 覚えておきます。
Zuishin

2018/11/12 00:11

とても興味深い結果ですが、ここまで差が出るのは信じ難くもあります。どんな IL が生成されているのか調べてみたくなりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問