9

この非常によく似た質問が、アイテムの順序に関係なく、2つのコレクションを比較して同等性を求めるなど、かなりの回数前に尋ねられたことを知っていますが、そこで読んでいるソリューションを使用しようとしていますが、何かが機能していません...これは私が犯しているばかげた間違いでなければなりません...助けてください!!

さて、これが私のシナリオです。コードで作成された次の 3 つのリストがあるとします。

Dim lst1 as new list(of integer)
Dim lst2 as new list(of integer)
Dim lst3 as new list(of integer)

そして、コード内で、たとえば、リストに次の値が含まれます。

lst1:    lst2:    lst3:
1        1        2
2        2        3
3        3        4
4        4        5

したがって、明らかに、lst1 と lst2 は等しく、lst1 と lst3 は等しくありませんが、これを確認するために if ステートメントにどのコードを記述すればよいでしょうか?

私はもう試した:

lst1.SequenceEqual(lstXX)

そして、それは私が試した lst2 と lst3 の両方に対してTrueを返します:

lst1.Equals(lstXX)

そして、それはlst2 と lst3 の両方に対してFalseを返します

これで、count と lst1.Except(lstXX) を比較するコードでそれを実行できることがわかりましたが、ここで何が間違っているのか、さらに重要なことに、これを行う最も効率的な方法は何ですか??

ありがとう!!!

4

2 に答える 2

20

Assuming you want ordering to be important, SequenceEqual is exactly what you want - and in the sample you've given, lst1.SequenceEqual(lst3) will return false. Here's a short but complete program to demonstrate:

using System;
using System.Collections.Generic;
using System.Linq;

class Test
{
    static void Main(string[] args)
    {
        var lst1 = new List<int> { 1, 2, 3, 4 };
        var lst2 = new List<int> { 1, 2, 3, 4 };
        var lst3 = new List<int> { 2, 3, 4, 5 };

        Console.WriteLine(lst1.SequenceEqual(lst2)); // True
        Console.WriteLine(lst1.SequenceEqual(lst3)); // False
    }
}
于 2012-10-25T18:59:27.437 に答える
1
class Program
{
    static void Main(string[] args)
    {
        var list1 = new List<int>() { 1, 2, 3, 4 };
        var list2 = new List<int>() { 1, 2, 3, 4 };
        var list3 = new List<int>() { 2, 3, 3, 4 };

        Console.WriteLine(list1.SequenceEqual(list2)); // True
        Console.WriteLine(list1.SequenceEqual(list3)); // False
        Console.ReadLine();
    }
}

期待どおりに動作します。何か他のものでなければなりません。

あなたのとは、あなたが思っているとおりのものであると確信していますか?ij

質問に書いたとおりにリストが並べられていることは確かですか? それらが正しく順序付けられていない場合、FalseSequenceEqualが返されます。

于 2012-10-25T19:00:45.050 に答える