5

次のコード セグメント::

static void Main(string[] args)
{
   List<List<int>> bigList = new List<List<int>> { };
   bigList.Add(new List<int> { 1, 2 });
   bigList.Add(new List<int> { 2, 3 });
   bigList.Add(new List<int> { 3, 4 });
   List<int> subList = new List<int> { 1, 2 };    
   Console.WriteLine(bigList.Contains(subList));
}

出力は::「偽」です。次に、これを確認する方法は何ですか。出力が「True」になる方法を意味します

4

7 に答える 7

3

リスト内のエントリの重複を気にしない場合は、次を使用できます。

bigList.Any(b => new HashSet<int>(b).SetEquals(subList))

両方のリストにまったく同じ要素を含めたい場合は、これを使用できます。

bigList.Any(b => b.OrderBy(x => x).SequenceEqual(subList.OrderBy(x => x)))

両方のリストに同じ要素を同じ順序で持たせたい場合は、これを使用できます。

bigList.Any(x => x.SequenceEqual(subList))
于 2013-07-19T07:20:10.790 に答える
3

順序が重要でない場合は、Any+を使用できAllます。

bool anyContains = bigList
    .Any(l => bigList.Count == l.Count && l.All(i => subList.Contains(i)));

それ以外の場合はAny+を使用できますSequenceEqual

bool anySequencequals = bigList.Any(l => l.SequenceEqual(subList));
于 2013-07-19T07:10:02.113 に答える
1

Alllinq ステートメントを使用する

var result = bigList.Where(x => x.All(y => subList.Contains(y)));
于 2013-07-19T07:10:12.410 に答える
1

SequenceEqualメソッドを使用して確認できますAny

bigList.Any(x => x.SequenceEqual(subList))
于 2013-07-19T07:10:26.840 に答える
0

SequenceEqualと を使用してみてくださいAny:

bigList.Any(c => c.SequenceEqual(subList));

または、 を別の方法で使用する場合Containsは、カスタムを作成する必要がありますEqualityComparer

public class CollectionEqualityComparer<T> : IEqualityComparer<IEnumerable<T>>
{
    public Equals(IEnumerable<T> x, IEnumerable<T> y) 
    { 
        return x.SequenceEqual(y); 
    }
    public GetHashCode(IEnumerable<T> obj) 
    {
        unchecked
        {
            return obj.Select(x => x.GetHashCode())
                      .Aggregate(17, (a, b) => a * 31 * b);
        }
    }
}

そして、次のContainsように使用します。

bigList.Contains(sublist, new CollectionEqualityComparer<int>());
于 2013-07-19T07:10:33.630 に答える
0

これを試して

bigList.Add(サブリスト);

完全なコード

        List<List<int>> bigList = new List<List<int>> { };
        List<int> subList = new List<int> { 1, 2 };
        bigList.Add(subList); //<<<<<<<<<< Here goes  Now bigList   contains subList    
        bigList.Add(new List<int> { 2, 3 });
        bigList.Add(new List<int> { 3, 4 });
        Console.WriteLine(bigList.Contains(subList));// true
于 2013-07-19T07:17:44.060 に答える