C# 检查两个IEnumerable是否相等
我正在尝试创建一个helper方法,该方法将检查两个C# 检查两个IEnumerable是否相等,c#,linq,C#,Linq,我正在尝试创建一个helper方法,该方法将检查两个IEnumerable集合在序列中的元素和项目序列方面是否相等。我已经想出了一个解决方案,下面的功能似乎做的工作。我想知道是否有一种更有效的方法可以在两个IEnumerable集合之间执行这种比较,这种方法更清晰、更简洁 private static bool AreEnumerablesEqual<T>(IEnumerable<T> first, IEnumerable<T> second)
IEnumerable
集合在序列中的元素和项目序列方面是否相等。我已经想出了一个解决方案,下面的功能似乎做的工作。我想知道是否有一种更有效的方法可以在两个IEnumerable
集合之间执行这种比较,这种方法更清晰、更简洁
private static bool AreEnumerablesEqual<T>(IEnumerable<T> first, IEnumerable<T> second)
{
var firstList = first.ToList();
var secondList = second.ToList();
foreach (var item in firstList)
{
var itemIndex = firstList.IndexOf(item);
if (!item.Equals(secondList[itemIndex]))
{
return false;
}
}
return true;
}
private static bool AreEnumerablesEqual(IEnumerable first,IEnumerable second)
{
var firstList=first.ToList();
var secondList=second.ToList();
foreach(第一个列表中的变量项)
{
var itemIndex=firstList.IndexOf(项目);
如果(!item.Equals(secondList[itemIndex]))
{
返回false;
}
}
返回true;
}
怎么样
你有两个选择
T
的默认相等比较器:
public static bool SequenceEqual<TSource>(
this IEnumerable<TSource> first,
IEnumerable<TSource> second
T
的默认相等比较器:
public static bool SequenceEqual<TSource>(
this IEnumerable<TSource> first,
IEnumerable<TSource> second
回答得很好,但可能需要一点时间example@Jaxi你真的认为这个问题的作者不知道如何调用一个方法吗?你显然对他们的能力评价很低。@Servy我的意思是,在有可能被标记为低质量答案的情况下,@Jaxi在帖子中编辑无关信息会让事情变得更糟,而不是更好。@Servy他们添加了关于答案的附加信息,从长远来看,不仅仅是OP会阅读答案,这将是一个有着不同经历的人群。答案很好,但可能需要一点经验example@Jaxi你真的认为这个问题的作者不知道如何调用一个方法吗?你显然对他们的能力评价很低。@Servy我的意思是,在有可能被标记为低质量答案的情况下,@Jaxi在帖子中编辑无关信息会让事情变得更糟,而不是更好。@Servy他们添加了关于答案的附加信息,从长远来看,不仅仅是OP会阅读答案,这将是一系列具有不同经验的人。因此,即使传递的序列已经是一个列表,那么?
ToList
也会创建一个新列表。您只需使用as
操作符尝试强制转换到IList
(以包括数组)。如果强制转换成功,则无需创建和填充新集合。第二:不要使用foreach
和IndexOf
如果您已经有一个列表,您可以通过索引访问。改为使用for
-循环。如果您有ToList
,则可以确保它在性能方面得到改进。如果您想实现自己的方法,而不是SequenceEqual
,那么使用迭代器和迭代,而这两个迭代器都有一个下一个项加上项是相等的IndexOf
是一个坏主意,如果您有类似new[]{1,1,1,1,1}
的东西,它将匹配new[]{1,2,3,4,5,6}
使用您的代码。因此,即使传递的序列已经是一个列表,也会创建一个新列表。您只需使用as
操作符尝试强制转换到IList
(以包括数组)。如果强制转换成功,则无需创建和填充新集合。第二:不要使用foreach
和IndexOf
如果您已经有一个列表,您可以通过索引访问。改为使用for
-循环。如果您有ToList
,则可以确保它在性能方面得到改进。如果您想实现自己的方法,而不是SequenceEqual
,那么使用迭代器和迭代,而这两个迭代器都有下一个项加上项是相等的IndexOf
是一个坏主意,如果您有类似new[]{1,1,1,1,1}
的东西,它将匹配new[]{1,2,3,4,5,6}
。