比较2个字符串数组元素并返回

Zhr*_*ain 3 c# linq arrays

我实际上是一个SQL开发人员,但现在正在研究C#和LINQ.我脑子里有一个逻辑,但由于技术障碍,我无法实现它.

我将有2个字符串数组.以下是我想要实施的条件,

  1. 我想找出数组1中是否存在数组2元素.
  2. 然后检查两个数组的元素序列.

对于前者 正确的情况

字符串1: {"ID","Name","Age","Address","Gender","Phone"}

字符串2: {"ID","Name","Phone"}

所以这应该返回true,因为所有数组2元素都存在于数组1中,并且序列也是正确的.

错案

字符串1: {"ID","Name","Age","Address","Gender","Phone"}

字符串2: {"ID","Name","Phone","Address"}

这应该返回false,尽管数组1中存在数组2元素,"Phone"出现在"Address"之前,但是在数组1中,"Address"出现在"Phone"之前.序列不正确所以它应该返回false.

这可能吗?我没有编写任何代码,因为我对LINQ来说是全新的.如果可以在C#中使用,如果不是LINQ,只是请问我,

Joh*_*ica 6

你可以使用IntersectSequenceEqual:

string[] a = new [] {"ID","Name","Age","Address","Gender","Phone"};
string[] b = new [] {"ID","Name","Phone"};
string[] c = new [] {"ID","Name","Phone","Address"};

Console.WriteLine(a.Intersect(b).SequenceEqual(b));
Console.WriteLine(a.Intersect(c).SequenceEqual(c));
Run Code Online (Sandbox Code Playgroud)

Intersect将获得a和b中都存在的元素,然后SequenceEqual确保它们的顺序相同.

值得注意的是Intersect()有效调用.Distinct(),因此仅当列表仅包含唯一元素时才会起作用.任何列表中的重复项都将被忽略Intersect().

小提琴