我有两个数组,我知道最简单的方法是知道它们是否有共同的元素。所以实际上这个问题不得不提问。
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;
country1
个国家/地区中的任何country2
国家/地区都在{{1}}数组中,那么最简单的linq查询是什么? 答案 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());