最简单的连接(交叉)代码
本文关键字:代码 交叉 连接 最简单 | 更新日期: 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;
- 最简单的linq查询是什么,它会让我知道是否有任何
country1
国家也在country2
数组中? 什么是最简单的linq查询,将返回每个重复国家的数组?
1) var isIntersection = countries1.Intersect(countries2).Any();
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());