检查arraylist中所有包含在其他arraylist中的字符串

时间:2019-01-23 18:56:28

标签: c#

我试图使Arraylist中的所有值都包含在其他arraylist中(所有值)

Arraylist一:

Name
Item

ArrayList的两个:

Item
Name
Count

注意:列表被随机排列

我尝试过:

foreach (string str1 in arraylistone)
                            {
                                if (arraylisttwo.Contains(str1))
                                {
                                    //return true;
                                }
                            }

但是如果包含某人元素,它就说真的

3 个答案:

答案 0 :(得分:2)

您可以使用Enumerable.Intersect。

        var listA = new List<string> { "Name", "Item" };
        var listB = new List<string> { "Name", "Item","Count" };

        var c = listA.Intersect(listB).ToList();

答案 1 :(得分:1)

有很多方法可以给猫皮。这是使用Linq的Join扩展方法的一种:

var list1 = new[] { "Name",  "Item" };
var list2 = new[] { "Item", "Name", "Count" };
var join = list1.Join(list2, l1 => l1, l2 => l2, (l1, l2) => new { l1, l2 });
var allContained = join.Count() == list1.Count();

请谨慎比较字符串。有一个重载,它需要IEqualityComparer<TKey>来定义键的比较方式。

更新

如Alex Leo所指出的,您可以使用Intersect

 var allContained = list1.Intersect(list2).Count() == list1.Count();

简单得多,它还提供了IEqualityComparer<T>重载。

答案 2 :(得分:0)

尝试这样的事情

var arrayOne = new string[4];
    arrayOne[0] = "Item1";
    arrayOne[1] = "Item2";
    arrayOne[2] = "Item3";
    arrayOne[3] = "Item4";

var arrayTwo = new string[4];
    arrayTwo[0] = "Item1";
    arrayTwo[1] = "Item2";
    arrayTwo[2] = "Item3";
    arrayTwo[3] = "Item4";

    var allItemIsThere = true;

    foreach (var one in arrayOne)
    {
        allItemIsThere = arrayTwo.Contains(one);
        if(!allItemIsThere)
        { break;}
    }