最简单的连接(交叉)代码

本文关键字:代码 交叉 连接 最简单 | 更新日期: 2023-09-27 18:07:23

我有两个数组,我想用最简单的方法知道它们是否有共同的元素。所以实际上这个问题有很多问题。

string[] countries1 = new string[] { "USA", "Uruguay", "India", "UK"};  
string[] countries2 = new string[] { "Urguay", "Argentina", "Brasil", "Chile" };  
foreach (string country in countries1)
    if (countries2.Contains(country))  
        return true;  
return false;
  1. 最简单的linq查询是什么,它会让我知道是否有任何country1国家也在country2数组中?
  2. 什么是最简单的linq查询,将返回每个重复国家的数组?

最简单的连接(交叉)代码

1) var isIntersection = countries1.Intersect(countries2).Any();

2) var intersectedCountries = countries1.Intersect(countries2);

对于国家1和国家2之间的交集:

countries1.Intersect(countries2).ToArray()

Adilson的回答涵盖了你的问题#2,对于问题#1

最简单的linq查询是什么,它可以让我知道是否有任何一个country1国家也在country2数组中?

你可以这样做:

countries1.Intersect(countries2).Any();

.Any()将在匹配的第一个实例时返回true,而.Count().ToArray()将迭代整个列表。

With LINQ:

var commonCountries = countries1.Intersect(countries2);
if (commonCountries.Any())
    // There are common countries.

但是,这没有考虑到字符串的套管等。你可能想要做的是,把一个快速的IEqualityComparer<string>:

public class OrdinalStringComparer : IEqualityComparer<string>
{
    public bool Equals(string s1, string s2)
    {
        return string.Equals(s1, s2, StringComparison.OrdinalCultureIgnoreCase);
    }
    public int GetHashCode(string str)
    {
        return (str == null) ? 0 : str.GetHashCode();
    }
}

然后通过Intersect调用传递它:

var commonCountries = countries1.Intersect(countries2, new OrdinalStringComparer());