检查字符串数组1项目存在于字符串数组2中并返回bool

问题描述 投票:-2回答:3

我有两个数组。我需要比较它们如下所示,结果应该是bool

Input : 
Example 1
---------
stringArray1 = "one","five"
stringArray2 = "two","one" ,"three","five"
Result = true

Example 2
---------
stringArray1 = "one","five"
stringArray2 = "two","three" ,"four","five"
Result = false (As "one" is not present in array2)

代码:

string[] stringArray1 = getDataTabledFromSP.Columns.Cast<DataColumn>()
    .OrderBy(x => x.ColumnName)
    .Select(x => x.ColumnName)
    .ToArray();

string[] stringArray2 = fetchColumnDetailsOfClientById
    .OrderBy(x => x.ColumnName)
    .Select(myLine => myLine.ColumnName).ToArray();
c# arrays linq string-comparison
3个回答
1
投票

你可以尝试设置算术:

 bool result = !stringArray1.Except(stringArray2).Any();

我们从stringArray2中减去stringArray1然后检查我们是否有任何项目(这是stringArray1中没有的stringArray2项目)。

编辑:如果stringArray1stringArray2可以有重复项,应该考虑(例如,所有三个相同的项目应该在stringArray2中找到):

  bool result = !stringArray1
    .GroupBy(item => item)
    .Select(chunk => Tuple.Create(chunk.Key, chunk.Count()))
    .Concat(stringArray2
       .GroupBy(item => item)
       .Select(chunk => Tuple.Create(chunk.Key, -chunk.Count()))
     )
    .GroupBy(item => item.Item1)
    .Select(chunk => chunk.Sum(item => item.Item2))
    .Any(item => item > 0);

0
投票

如果你想检查一个数组的所有元素是否存在于另一个或All()函数中,你可以使用Linq Any()函数

stringArray2.All(x => stringArray1.Contains(x))

0
投票

所以当true包含stringArray2中的每个项目时,你想要一些返回stringArray1的东西吗?这应该做:

// Not any string which is not contained in the stringArray2
!stringArray1.Any(s => !stringArray2.Contains(s));
© www.soinside.com 2019 - 2024. All rights reserved.