4

次の方法で 2 つのリストを比較しています。

var listOne = new List<int>{1,2,3,4,5};
var listTwo = new List<int>{1,2,3,4,5,7};
bool isEqual = false;

foreach (var item in listOne)
{
    if(listTwo.Contains(item))
    {
        isEqual = true;
    }
    else
    {
        isEqual = false;
        break;
    }
}

if(listOne.Count == listTwo.Count && isEqual == true)
{
    Console.WriteLine("Equal list");
}
else
{
    Console.WriteLine("Not Equal list");
}

これを行う簡単な方法はありますか?

4

5 に答える 5

17

とても簡単な方法

    var listOne = new List<int>{1,2,3,4,5};
    var listTwo = new List<int>{1,2,3,4,5,7};

    if (listOne.SequenceEqual(listTwo))
            {
                Console.WriteLine("Equal list");
            }
            else
            {
                Console.WriteLine("Not Equal list");
            }

順序が重要でない場合、解決策は次のようになります

    var listOne = new List<int>{1,2,3,4,5};
    var listTwo = new List<int>{1,2,3,4,5,7};

     if (listOne.OrderBy(m => m).SequenceEqual(listTwo.OrderBy(m => m)))
        {
            Console.WriteLine("Equal list");
        }
        else
        {
            Console.WriteLine("Not Equal list");
        }
于 2013-07-04T07:37:41.407 に答える
12

同じ順序に興味がない場合は、Except非常に効率的な方法を使用できます。

bool isEqual = !listOne.Except(listTwo).Any();

両方に同じアイテムが含まれているかどうかを知りたい場合 (順序は無視します):

if (listOne.Count > listTwo.Count)
    isEqual = !listOne.Except(listTwo).Any();
else
    isEqual = !listTwo.Except(listOne).Any();

両方のリストに同じアイテムが同じ順序で含まれているかどうかを確認するには:

bool isEqual = listOne.SequenceEqual(listTwo);

Equalsカスタムタイプを使用している場合は、 andをオーバーライドする必要がありますGetHashCode。それ以外の場合は、参照によって比較するだけです。

于 2013-07-04T07:39:37.237 に答える
0

リスト内のアイテムの順序が重要な場合は、SequenceEqualここでできるだけ多くのアドバイスを使用できます。

順序が問題にならない場合は、前にリストをソートする必要があります。サイズが異なる場合はソートと比較を避けるために、ソートの前にリストの数を確認します。

var listOne = new List<int>{1,2,3,4,5};
var listTwo = new List<int>{1,2,3,4,5,7};

var equal = (listOne.Count == listTwo.Count);

if (equal)
{
    listOne.Sort();
    listTwo.Sort();
    equal = listOne.SequenceEqual(listTwo)
}

if (equal)
{
     Console.WriteLine("Equal list");
}
else
{
     Console.WriteLine("Not Equal list");
}
于 2013-07-04T07:47:54.913 に答える