【问题标题】:Compare Two Arrays And Delete Same (Intersect) Value From Second Array [duplicate]比较两个数组并从第二个数组中删除相同(相交)的值[重复]
【发布时间】:2019-06-12 07:30:43
【问题描述】:
       string[] one={"my", "5", "two", "array", "hey?", "good", "day"};
       string[] two={"hello!", "how", "good", "day", "us", "very", "two", "hard", "learn", "it"};

例如:我有这些上面的数组,我想比较它们,比较后从 string[] 两个中删除相同的值。所以,当我编译代码时,我的数组会是这样的;

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

注意:我无法对此产生任何想法,抱歉。

【问题讨论】:

  • 所以你只想修改数组two ?
  • 是的,先生。我只想修改数组二。

标签: c# arrays compare intersection


【解决方案1】:

只需在Linq 语句中使用WhereContains,然后使用ToArray

简单来说,

  1. 它通过检查数组one 是否不包含两个元素中的每个元素来过滤数组two

  2. 将输出转换回数组

  3. 将其分配给您的变量two

示例

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));

注意,这是区分大小写的

输出

hello!,how,us,very,hard,learn,it

或者更高效的方法是使用Except,我完全忘记了(感谢 cmets)

two = two.Except(one).ToArray();

Enumerable.Except Method

产生两个序列的集合差。

Enumerable.Where Method

根据谓词过滤一系列值。

Enumerable.Contains Method

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

Enumerable.ToArray(IEnumerable) Method

从 IEnumerable 创建一个数组。

【讨论】:

  • 在这段代码之后,我可以像数组一样使用“二”吗?
  • @heymycoder 是
  • 似乎.Contains(x) 将导致二次时间复杂度。将one 组合成一个集合会使它成为线性的。
  • @ggorlen 是的,它将是二次的,或者更少
  • 看起来像 .Except 的“次优”实现...您认为这是更好的方法有什么特别的原因吗?
猜你喜欢
  • 2016-12-19
  • 2019-01-08
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
相关资源
最近更新 更多