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

时间:2011-09-04 18:58:38

标签: c# linq intersection

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

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. 如果country1个国家/地区中的任何country2国家/地区都在{{1}}数组中,那么最简单的linq查询是什么?
  2. 什么是最简单的linq查询,它将返回每个重复国家/地区的数组?

4 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:2)

国家1和2之间的交叉:

countries1.Intersect(countries2).ToArray()

答案 2 :(得分:1)

Adilson的答案涵盖了您的问题#2和问题#1

  

如果country1国家/地区中的任何一个国家/地区也属于country2数组,那么最简单的linq查询会让我知道吗?

你会这样做:

countries1.Intersect(countries2).Any();

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

答案 3 :(得分:1)

使用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());