我的情况是我有一个id列表,例如{1,2,3,4}。我需要传入另一个id列表的方法,如果列表中有相同的数字,则返回true,否则如果任一列表不相同(忽略排序)我需要返回false。因此,使用{1,2,3,4,5}的方法调用应该返回false,而使用{2,4,1,3}的调用返回true。这听起来很简单,但我无法弄清楚如何做到这一点。
答案 0 :(得分:2)
最简单的方法可能就是:
var idSet = new HashSet<int>(idList1);
if (idSet.SetEquals(idList2))
{
...
}
根据评论,这会将{1,1,1,1,1}视为等于{1} - 换句话说,它会将其视为一个集合而不是可能重复值的无序集合
答案 1 :(得分:0)
如果您确保idList
中没有重复元素,则可以使用以下内容:
if (idList.Count == otherIDList.Count &&
idList.Intersect(otherIDList).Count() == idList.Count)
{
// Contain same things.
}
else
{
// Do not contain same things.
}
第一项检查是确保它们的大小相同。这是一种非常便宜的方式来查看列表是否有可能是相同的,与字符串相同。此外,如果没有它,如果otherIDList
是idList
的超集,则该语句将返回true。
如果你不能保证集合中的独特性,我认为你将不得不自己编写代码。