76

リストA:

1, 2, 3, 4

リストB:

2, 5

リストAにリストBの値が含まれているかどうかを確認するにはどうすればよいですか?

たとえば、A.contains(a => a.id = B.id)のようなものですか?

4

8 に答える 8

141

パフォーマンスを気にしない場合は、次のことを試すことができます。

a.Any(item => b.Contains(item))
// or, as in the column using a method group
a.Any(b.Contains)

しかし、私はこれを最初に試します:

a.Intersect(b).Any()
于 2012-09-11T19:18:44.753 に答える
33

Justins の 2 つのソリューションを紹介しました。a.Any(a => b.Contains(a))最速です。

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

namespace AnswersOnSO
{
    public class Class1
    {
        public static void Main(string []args)
        {
//            How to check if list A contains any value from list B?
//            e.g. something like A.contains(a=>a.id = B.id)?
            var a = new List<int> {1,2,3,4};
            var b = new List<int> {2,5};
            var times = 10000000;

            DateTime dtAny = DateTime.Now;
            for (var i = 0; i < times; i++)
            {
                var aContainsBElements = a.Any(b.Contains);
            }
            var timeAny = (DateTime.Now - dtAny).TotalSeconds;

            DateTime dtIntersect = DateTime.Now;
            for (var i = 0; i < times; i++)
            {
                var aContainsBElements = a.Intersect(b).Any();
            }
            var timeIntersect = (DateTime.Now - dtIntersect).TotalSeconds;

            // timeAny: 1.1470656 secs
            // timeIn.: 3.1431798 secs
        }
    }
}
于 2012-09-11T20:15:38.520 に答える
20

Intersect次の2つのリストを作成できます。

if (A.Intersect(B).Any())
于 2012-09-11T19:18:58.813 に答える
0

これが関係ない場合は申し訳ありませんが、必要な場合に備えて FindAll() を使用して一致するリストを返します:

        private bool IsContain(string cont)
    {
        List<string> ListToMatch= new List<string>() {"string1","string2"};

        if (ListToMatch.ToArray().Any(cont.Contains))
        {
            return false;
        }
        else
            return true;
    }

そして使用法:

List<string> ListToCheck = new List<string>() {"string1","string2","string3","string4"};
List<string> FinalList = ListToCheck.FindAll(IsContain);

最後のリストには、チェック対象のリストから一致した要素 string1 および string2 のみが含まれます。簡単に int List に切り替えることができます。

于 2018-12-09T14:05:52.443 に答える