我试图使Arraylist中的所有值都包含在其他arraylist中(所有值)
Arraylist一:
Name
Item
ArrayList的两个:
Item
Name
Count
注意:列表被随机排列
我尝试过:
foreach (string str1 in arraylistone)
{
if (arraylisttwo.Contains(str1))
{
//return true;
}
}
但是如果包含某人元素,它就说真的
答案 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;}
}