我需要了解两个 IEnumerable 之间的差异。我为它写了扩展方法。但正如你所看到的,它有性能损失。谁能写出更好的版本?
编辑
在第一次回复后,我明白我无法很好地解释。我正在访问这两个阵列三次。这是性能损失。应该是单发。
PS:两者都是可选的:)
public static class LinqExtensions
{
public static ComparisonResult<T> Compare<T>(this IEnumerable<T> source, IEnumerable<T> target)
{
// Looping three times is performance penalty!
var res = new ComparisonResult<T>
{
OnlySource = source.Except(target),
OnlyTarget = target.Except(source),
Both = source.Intersect(target)
};
return res;
}
}
public class ComparisonResult<T>
{
public IEnumerable<T> OnlySource { get; set; }
public IEnumerable<T> OnlyTarget { get; set; }
public IEnumerable<T> Both { get; set; }
}