比较两个不同长度和显示差异的阵列

Sea*_*ean 10 c# arrays

问题:
我有两个可能长度不同的数组.我需要迭代两个数组并找到相似之处,添加和删除.

在C#中实现这一目标的最快,最有效的方法是什么?

编辑: 数组已预先排序,它们可以包含50到100个项目之间的任何位置.此外,对速度和/或内存使用没有任何限制(但是,没有人喜欢内存耗费;)


例如:

String[] Foo_Old = {"test1", "test2", "test3"};
String[] Foo_New = {"test1", "test2", "test4", "test5"};
Run Code Online (Sandbox Code Playgroud)

String[] Bar_Old = {"test1", "test2", "test4"};
String[] Bar_New = {"test1", "test3"};
Run Code Online (Sandbox Code Playgroud)

区别:

(关于Foo_New数组)

[Same]    "test1"
[Same]    "test2"
[Removed] "test3"
[Added]   "test4"
[Added]   "test5"

(关于Bar_New数组)

[Same]    "test1"
[Removed] "test2"
[Removed] "test4"
[Added]   "test3"

JP *_*oto 20

你可以使用ExceptIntersect ......

var Foo_Old = new[] { "test1", "test2", "test3" }; 
var Foo_New = new[] { "test1", "test2", "test4", "test5" };

var diff = Foo_New.Except( Foo_Old );
var inter = Foo_New.Intersect( Foo_Old );
var rem = Foo_Old.Except(Foo_New);

foreach (var s in diff)
{
    Console.WriteLine("Added " + s);
}

foreach (var s in inter)
{
    Console.WriteLine("Same " + s);
}

foreach (var s in rem)
{
    Console.WriteLine("Removed " + s);
}
Run Code Online (Sandbox Code Playgroud)