C#でのSequenceEqualの使い方とは?配列の比較とオブジェクトの比較
 
          - システム
 エンジニア
- C#でSequenceEqualを使うと何ができるのですか。
- プロジェクト
 マネージャー
- 配列やオブジェクト同士が一致しているか否かを判定できます。
C#でのSequenceEqualの使い方とは?

            今回は、C#でのSequenceEqualの使い方について説明します。SequenceEqualを使うと、配列やオブジェクト同士が一致しているか否かを判定できます。オブジェクトの場合は、参照先のアドレス一致を判定するため、値の一致を確認するには工夫が必要です。
C#でのSequenceEqualの使い方に興味のある方はぜひご覧ください。
            
配列の比較
C#で配列を比較する方法を紹介します。実際のソースコードを見てみましょう。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         
                          8
                         
                          9
                         
                          10
                         
                          11
                         
                          12
                         
                          13
                         
                          14
                         
                          15
                         
                          16
                         
                          17
                         
                          18
                         
                          19
                         
                          20
                         
                          21
                         
                          22
                         
                          23
                         | 
                          using System;
                         
                          using System.Linq;
                         
                          using System.Collections;
                         
                          using System.Collections.Generic;
                         
                          public class Hello{
                         
                              public static void Main(){
                         
                                  // 配列初期化
                         
                                  int[] arr1 = new int[]{ 1, 2, 3, 4, 5 };
                         
                                  int[] arr2 = new int[]{ 1, 2, 3, 4, 5 };
                         
                                  int[] arr3 = new int[]{ 1, 2, 4, 3, 5 };
                         
                                  // 配列表示
                         
                                  Console.WriteLine(“arr1: {0}”, string.Join(“,”, arr1));
                         
                                  Console.WriteLine(“arr2: {0}”, string.Join(“,”, arr2));
                         
                                  Console.WriteLine(“arr3: {0}”, string.Join(“,”, arr3));
                         
                                  // 結果表示
                         
                                  Console.WriteLine(“arr1.SequenceEqual(arr2): “ + arr1.SequenceEqual(arr2));
                         
                                  Console.WriteLine(“arr2.SequenceEqual(arr3): “ + arr2.SequenceEqual(arr3));
                         
                                  Console.WriteLine(“arr3.SequenceEqual(arr1): “ + arr3.SequenceEqual(arr1));
                         
                              }
                         
                          }
                         | 
実行結果は以下のようになります。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         | 
                          arr1: 1,2,3,4,5
                         
                          arr2: 1,2,3,4,5
                         
                          arr3: 1,2,4,3,5
                         
                          arr1.SequenceEqual(arr2): True
                         
                          arr2.SequenceEqual(arr3): False
                         
                          arr3.SequenceEqual(arr1): False
                         | 
このようにC#では、SequenceEqualで配列を比較できます。Listも同じように比較できます。
配列の比較(順不同)
C#で配列の順序を無視して比較する方法を紹介します。実際のソースコードを見てみましょう。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         
                          8
                         
                          9
                         
                          10
                         
                          11
                         
                          12
                         
                          13
                         
                          14
                         
                          15
                         
                          16
                         
                          17
                         
                          18
                         
                          19
                         
                          20
                         
                          21
                         
                          22
                         
                          23
                         
                          24
                         
                          25
                         
                          26
                         
                          27
                         
                          28
                         | 
                          using System;
                         
                          using System.Linq;
                         
                          using System.Collections;
                         
                          using System.Collections.Generic;
                         
                          public class Hello{
                         
                              public static void Main(){
                         
                                  // 配列初期化
                         
                                  int[] arr1 = new int[]{ 1, 2, 3, 4, 5 };
                         
                                  int[] arr2 = new int[]{ 1, 2, 3, 4, 5 };
                         
                                  int[] arr3 = new int[]{ 1, 2, 4, 3, 5 };
                         
                                  // 配列のソート
                         
                                  Array.Sort(arr1);
                         
                                  Array.Sort(arr2);
                         
                                  Array.Sort(arr3);
                         
                                  // 配列表示
                         
                                  Console.WriteLine(“arr1: {0}”, string.Join(“,”, arr1));
                         
                                  Console.WriteLine(“arr2: {0}”, string.Join(“,”, arr2));
                         
                                  Console.WriteLine(“arr3: {0}”, string.Join(“,”, arr3));
                         
                                  // 結果表示
                         
                                  Console.WriteLine(“arr1.SequenceEqual(arr2): “ + arr1.SequenceEqual(arr2));
                         
                                  Console.WriteLine(“arr2.SequenceEqual(arr3): “ + arr2.SequenceEqual(arr3));
                         
                                  Console.WriteLine(“arr3.SequenceEqual(arr1): “ + arr3.SequenceEqual(arr1));
                         
                              }
                         
                          }
                         | 
実行結果は以下のようになります。ソートすることで、順番を揃えたうえで比較できます。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         | 
                          arr1: 1,2,3,4,5
                         
                          arr2: 1,2,3,4,5
                         
                          arr3: 1,2,3,4,5
                         
                          arr1.SequenceEqual(arr2): True
                         
                          arr2.SequenceEqual(arr3): True
                         
                          arr3.SequenceEqual(arr1): True
                         | 
オブジェクトの比較
C#でオブジェクトを比較する方法を紹介します。実際のソースコードを見てみましょう。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         
                          8
                         
                          9
                         
                          10
                         
                          11
                         
                          12
                         
                          13
                         
                          14
                         
                          15
                         
                          16
                         
                          17
                         
                          18
                         
                          19
                         
                          20
                         
                          21
                         
                          22
                         
                          23
                         
                          24
                         
                          25
                         
                          26
                         
                          27
                         
                          28
                         
                          29
                         
                          30
                         | 
                          using System;
                         
                          using System.Linq;
                         
                          using System.Collections;
                         
                          using System.Collections.Generic;
                         
                          class Human {
                         
                              public string Name { get; set; }
                         
                              public int    Age  { get; set; }
                         
                          }
                         
                          public class Hello{
                         
                              public static void Main(){
                         
                                  // オブジェクト生成
                         
                                  Human human1 = new Human { Name = “taro”, Age = 22 };
                         
                                  Human human2 = new Human { Name = “jiro”, Age = 28 };
                         
                                  // List生成
                         
                                  List<Human> human_list1 = new List<Human> { human1, human2 };
                         
                                  List<Human> human_list2 = new List<Human> { human1, human2 };
                         
                                  List<Human> human_list3 = new List<Human> { 
                         
                                      new Human { Name = “taro”, Age = 22 },
                         
                                      new Human { Name = “jiro”, Age = 28 }
                         
                                  };
                         
                                  // 結果表示
                         
                                  Console.WriteLine(“human_list1.SequenceEqual(human_list2): “ + human_list1.SequenceEqual(human_list2));
                         
                                  Console.WriteLine(“human_list2.SequenceEqual(human_list3): “ + human_list2.SequenceEqual(human_list3));
                         
                                  Console.WriteLine(“human_list3.SequenceEqual(human_list1): “ + human_list3.SequenceEqual(human_list1));
                         
                              }
                         
                          }
                         | 
実行結果は以下のようになります。配列とは異なり、参照先のオブジェクトが一致でなければTrueになりません。
| 
                          1
                         
                          2
                         
                          3
                         | 
                          human_list1.SequenceEqual(human_list2): True
                         
                          human_list2.SequenceEqual(human_list3): False
                         
                          human_list3.SequenceEqual(human_list1): False
                         | 
オブジェクトの値比較
C#でオブジェクトの値まで比較する方法を紹介します。実際のソースコードを見てみましょう。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         
                          8
                         
                          9
                         
                          10
                         
                          11
                         
                          12
                         
                          13
                         
                          14
                         
                          15
                         
                          16
                         
                          17
                         
                          18
                         
                          19
                         
                          20
                         
                          21
                         
                          22
                         
                          23
                         
                          24
                         
                          25
                         
                          26
                         
                          27
                         
                          28
                         
                          29
                         
                          30
                         
                          31
                         
                          32
                         
                          33
                         
                          34
                         
                          35
                         
                          36
                         
                          37
                         
                          38
                         
                          39
                         
                          40
                         | 
                          using System;
                         
                          using System.Linq;
                         
                          using System.Collections;
                         
                          using System.Collections.Generic;
                         
                          class Human {
                         
                              public string Name { get; set; }
                         
                              public int    Age  { get; set; }
                         
                          }
                         
                          class HumanComparer : IEqualityComparer<Human> {
                         
                              public bool Equals( Human first, Human second ) {
                         
                                  return( first.Name == second.Name && first.Age == second.Age );
                         
                              }
                         
                              public int GetHashCode( Human human ) {
                         
                                  return 0;
                         
                              }
                         
                          }
                         
                          public class Hello{
                         
                              public static void Main(){
                         
                                  // オブジェクト生成
                         
                                  Human human1 = new Human { Name = “taro”, Age = 22 };
                         
                                  Human human2 = new Human { Name = “jiro”, Age = 28 };
                         
                                  // List生成
                         
                                  List<Human> human_list1 = new List<Human> { human1, human2 };
                         
                                  List<Human> human_list2 = new List<Human> { human1, human2 };
                         
                                  List<Human> human_list3 = new List<Human> { 
                         
                                      new Human { Name = “taro”, Age = 22 },
                         
                                      new Human { Name = “jiro”, Age = 28 }
                         
                                  };
                         
                                  // 結果表示
                         
                                  HumanComparer comparer = new HumanComparer();
                         
                                  Console.WriteLine(“human_list1.SequenceEqual(human_list2): “ + human_list1.SequenceEqual(human_list2, comparer));
                         
                                  Console.WriteLine(“human_list2.SequenceEqual(human_list3): “ + human_list2.SequenceEqual(human_list3, comparer));
                         
                                  Console.WriteLine(“human_list3.SequenceEqual(human_list1): “ + human_list3.SequenceEqual(human_list1, comparer));
                         
                              }
                         
                          }
                         | 
実行結果は以下のようになります。オブジェクトの値が一致すればTrueになります。
| 
                          1
                         
                          2
                         
                          3
                         | 
                          human_list1.SequenceEqual(human_list2): True
                         
                          human_list2.SequenceEqual(human_list3): True
                         
                          human_list3.SequenceEqual(human_list1): True
                         | 
C#では、IEqualityComparerを継承したHumanComparerクラスを作成し、SequenceEqualの第二引数に指定することで、値の一致を判定できます。
- システム
 エンジニア
- C#でSequenceEqualを使うと、配列やオブジェクト同士が一致しているか否かを判定できるのですね。
- プロジェクト
 マネージャー
- その通りです。オブジェクトの場合は参照先のアドレスが一致しているか否かを判定するため、値の一致を確認するには工夫が必要です。
まとめ
いかがでしたでしょうか。C#でのSequenceEqualの使い方について説明しました。SequenceEqualを使うと、配列やオブジェクト同士が一致しているか否かを判定できます。オブジェクトの場合は、参照先のアドレス一致を判定するため、値の一致を確認するには工夫が必要です。
ぜひご自身でC#のソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
          
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
          数多くのエンジニアが集まります。

- 
              スマホアプリから業務系システムまで スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。 
- 
              充実した研修制度 毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。 
- 
              資格取得を応援 スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。 
- 
              東証プライム上場企業グループ オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。 安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。 
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
              まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


C#新着案件New Job
- 
              
              システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務月給29万~34万円東京都新宿区(新宿駅)
- 
              
              システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務月給41万~50万円東京都新宿区(新宿駅)
- 
              
              デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務月給29万~34万円神奈川県横浜市(桜木町駅)
- 
              
              デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務月給41万~50万円神奈川県横浜市(桜木町駅)
- 
              
              基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務月給29万~34万円東京都新宿区(西新宿駅)
- 
              
              基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務月給41万~50万円東京都新宿区(西新宿駅)





