C# 比较两个数组并从第二个数组中删除相同的(相交)值

C# 比较两个数组并从第二个数组中删除相同的(相交)值,c#,arrays,compare,intersection,C#,Arrays,Compare,Intersection,例如:我有上面这些数组,我想比较它们,比较后从字符串[]2中删除相同的值。因此,当我编译代码时,我的数组将是这样的 string[] one={"my", "5", "two", "array", "hey?", "good", "day"}; string[] two={"hello!", "how", "good", "day", "us", "very", "two", "hard", "learn", "it"}; 注意:对不起,我没有任何想法。只需在Lin

例如:我有上面这些数组,我想比较它们,比较后从字符串[]2中删除相同的值。因此,当我编译代码时,我的数组将是这样的

       string[] one={"my", "5", "two", "array", "hey?", "good", "day"};
       string[] two={"hello!", "how", "good", "day", "us", "very", "two", "hard", "learn", "it"};

注意:对不起,我没有任何想法。

只需在
Linq
语句中使用
Where
包含
,然后
ToArray

简言之

  • 它通过检查数组
    one
    是否不包含两个元素来过滤数组
    two

  • 将输出转换回数组

  • 将其返回给变量
    two

  • 示例

           string[] one={"my", "5", "two", "array", "hey?", "good", "day"};
           string[] two={"hello!", "how", "us", "very", "hard", "learn", "it"};
    
    注意,这是区分大小写的

    输出

    string[] one={"my", "5", "two", "array", "hey?", "good", "day"};
    string[] two = { "hello!", "how", "good", "day", "us", "very", "two", "hard", "learn", "it" };
    
    two = two.Where(x => !one.Contains(x)).ToArray();
    
    Console.WriteLine(string.Join(",", two));
    

    或者更有效的方法是使用
    ,除了
    ,我完全忘记了这一点(感谢评论)


    生成两个序列的集差

    基于谓词筛选值序列

    确定序列是否包含指定的元素

    从IEnumerable创建数组


    所以你只想修改数组
    two
    ?是的,先生。我只想修改数组2。在这段代码之后,我可以像数组一样使用“2”吗?@heymycoder yesSeems like
    。Contains(x)
    将导致二次时间复杂度。将
    一个
    组合成一个集合将使其成为线性。@ggorlen是的,它将是二次的,或者更像
    的“次优”实现。除了
    。。。你认为这是更好的方法,有什么特别的原因吗?
    hello!,how,us,very,hard,learn,it
    
    two = two.Except(one).ToArray();