【问题标题】:Getting the Matched number of the two array获取两个数组的匹配数
【发布时间】:2012-06-27 06:34:19
【问题描述】:

我有 2 个数组。

String[] arrFirst={"a","b","c","d","e"};
String[] arrSecond={"a","b","f","d","g"};
String[] arrThird={"a","f","g","h","e"};

我想要 arrFirstarrSecond 这样的结果,结果是 3

对于arrFirstarrThird,结果为2

我发现的所有代码都在比较两个数组并返回它们是否相同。

但我想要的是匹配多少。

我可以做循环方式。

但我认为这会花费太多时间,我想知道是否有更快的方法。

谢谢..

【问题讨论】:

  • >>“我可以使用循环方式......任何更快的方式”-> 循环必须以任何方式进行。以下所有答案都使用内部循环
  • 如果 arrThird 是 {"a","f","g","e","h"},您期望什么结果?
  • 前面的代码会确保没有重复

标签: c# asp.net .net linq linq-to-objects


【解决方案1】:

你可以使用Intersect方法。

    String[] arrFirst={"a","b","c","d","e"};
    String[] arrSecond={"a","b","f","d","g"};
    String[] arrThird={"a","f","g","h","e"};

    arrFirst.Intersect(arrSecond).Count(); // 3
    arrFirst.Intersect(arrThird).Count(); //2

【讨论】:

  • +1,相交是这里最合适的答案。我自己发的,但 Tilak 打败了我。
  • 是的,它有效.. 非常感谢。只是好奇如果数组不是String而是Object,它是否会起作用
  • 是的,应该。虽然我不确定它用于 Equality 的逻辑(默认 Object.Equals,或者在引用类型的情况下仅比较引用)。对于值类型,我相信它会起作用。
  • 如果您需要额外的逻辑来比较数组对象,Intersect 提供了带有IEqualityComparer<TSource> 参数的overload。否则,在我下面的Zip example,还有定制对比的空间。
【解决方案2】:
arrFirst.Join(arrSecond,f=>f,s=>s,(f,s)=>f).count();

【讨论】:

    【解决方案3】:
    arrFirst.Zip(arrSecond, (a, b) => a.Equals(b)).Count(a => a);
    

    【讨论】:

      猜你喜欢
      • 2020-04-04
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多