这应该很容易。
我想检查两个列表是否相同,因为它们包含所有相同的元素,不重要。
认为重复的元素是相等的,即new[]{1,2,2}
与new[]{2,1}
相同
答案 0 :(得分:31)
var same = list1.Except(list2).Count() == 0 &&
list2.Except(list1).Count() == 0;
答案 1 :(得分:6)
编辑:这是在OP添加{1,2,2}等于{1,1,2}之前编写的(关于处理重复条目)。
只要元素与订单具有可比性,这将有效。
bool equal = list1.OrderBy(x => x).SequenceEqual(list2.OrderBy(x => x));
答案 2 :(得分:3)
SetEquals的HashSet最适合检查两个集合是否与此问题中定义的相同
string stringA = "1,2,2";
string stringB = "2,1";
HashSet<string> setA = new HashSet<string>((stringA.Trim()).Split(',').Select(t => t.Trim()));
HashSet<string> setB = new HashSet<string>((stringB.Trim()).Split(',').Select(t => t.Trim()));
bool isSetsEqual = setA.SetEquals(setB);
参考:
答案 3 :(得分:1)
您需要获取两个列表的交集:
bool areIntersected = t1.Intersect(t2).Count() > 0;
回答你的修改问题:
bool areSameIntersection = t1.Except(t2).Count() == 0 && t2.Except(t1).Count() == 0;
答案 4 :(得分:0)
如果list2中list1元素的数量等于list1中list2元素的数量,那么列表都包含相同数量的元素,它们都是彼此的子集 - 换句话说,它们都包含相同的元素。 / p>
if (list1.Count(l => list2.Contains(l)) == list2.Count(l => list1.Contains(l)))
return true;
else
return false;