4

ラムダでこれを行うにはどうすればよいですか? 2 つのリストが同じ値を持っているかどうかを調べます。

    void Main()
    {
        var list1 = new List<string>{
            "a", "b", "c"
        };

        var list2 = new List<string>{
            "c", "d", "e"
        };

        bool listsHaveSameValue = false;
        foreach(var list1Value in list1){
              listsHaveSameValue = list2.Any(c => c.Equals(list1Value));
              if(listsHaveSameValue){
                   break;
              }
        }

        Debug.WriteLine(listsHaveSameValue.ToString());
    }
4

6 に答える 6

4

を調べる必要がありますIntersect

var list1 = new List<string>{ "a", "b", "c"};
var list2 = new List<string>{ "c", "d", "e"};

var doubles = list1.Intersect(list2);
bool listsHaveSameValue = doubles.Any();

実際には、ラムダを使用する必要はありません(あなたが尋ねたように)。

于 2013-01-14T09:56:49.793 に答える
0

Enumerable.Intersectメソッドを使ってみる

デフォルトの等値比較子を使用して値を比較することにより、2 つのシーケンスの積集合を生成します。

public static void Main(string[] args)
        {
            var list1 = new List<string>{
            "a", "b", "c"
        };

            var list2 = new List<string>{
            "c", "d", "e"
        };

           IEnumerable<string> dubvalues = list2.Intersect(list1);

            foreach (var i in dubvalues)
            {
                Console.WriteLine(i); // Output is c
            }
        }

ここに がありDEMOます。

于 2013-01-14T09:57:50.310 に答える
0

最後の値を効果的に検索しています。

すべての要素が同じかどうかを判断するには (リスト内の順序に関係なく)

使用する必要があります

 listsHaveSameValue = listsHaveSameValue && list2.Any(c => c.Equals(list1Value));

それ以外の

 listsHaveSameValue = list2.Any(c => c.Equals(list1Value));

同じ要素list1を持っているかどうかを判断するLinqの方法の1つは、使用することですlist2SequenceEqual

listsHaveSameValue = list1.OrderBy(x=>x).SequenceEqual(list2.OrderBy(x=>x)
于 2013-01-14T09:58:09.507 に答える
0

交差を使用する必要があります

var list3 = list2.Intersect(list1);

list3 には、両方のリストに出現する要素が含まれています

于 2013-01-14T09:58:40.053 に答える
0

これにより、少なくとも 1 つの共通要素の存在がチェックされます。

list1.Any(i => list2.Contains(i));
于 2013-01-14T09:58:46.427 に答える
0
list1.Intersect(list2).Any()

true または false を返す必要があります。

于 2013-01-14T09:59:05.823 に答える